应该没人像我一样犯这么的的离谱错误
int query(int u, int x) {
if (tr[u].tmax < x) return 0;
if (tr[u].l == tr[u].r) {
if (tr[u].lmax == 1) return tr[u].l;
else return 0;
}
pushdown(u);
int _x = query(u << 1, x);
if (_x) return _x;
if (tr[u << 1].rmax + tr[u << 1 | 1].lmax >= x)
return tr[u << 1].r - tr[u << 1].rmax + 1;
else return query(u << 1 | 1, x);
}