提供一下build()和update()
```cpp
inline void build(int p, int l, int r, int x)
{
tag[p] = 0;
if (l == r)
{
t[p] = a[l] >= x;
return;
}
int mid = l + r >> 1;
build(ls(p), l, mid, x);
build(rs(p), mid + 1, r, x);
push_up(p);
}
inline void update(int p, int l, int r, int dl, int dr, int k)
{
if (dl <= l && r <= dr)
{
f(p, l, r, k);
return;
}
if (dl > r || dr < l)
return;
push_down(p, l, r);
int mid = l + r >> 1;
if (dl <= mid)
update(ls(p), l, mid, dl, dr, k);
if (mid < dr)
update(rs(p), mid + 1, r, dl, dr, k);
push_up(p);
}
```
by creation_hy @ 2022-10-20 00:27:40
@[creation_hy](/user/576378) 你是不是传入 update 函数的值就不合法。
by DitaMirika @ 2022-10-20 08:04:23
应该不会啊。。
```cpp
if (q[i].op)
{
update(1, 1, n, q[i].l, q[i].l + mid - 1, 1);
update(1, 1, n, q[i].l + mid, q[i].r, -1);
}
else
{
update(1, 1, n, q[i].r - mid + 1, q[i].r, 1);
update(1, 1, n, q[i].l, q[i].r - mid, -1);
}
```
by creation_hy @ 2022-10-20 09:39:30
orz %%% orz\
另外我感觉 RE 的话可能是对一个全部为 0 的区间进行排序,mid 等于 0 ,然后这句
```cpp
update(1, 1, n, q[i].r - mid + 1, q[i].r, 1);
```
就寄了,r < l
by ReTF @ 2022-11-08 22:24:09