警示后人——如果你二分+线段树 10pts或者60pts

P2824 [HEOI2016/TJOI2016] 排序

提供一下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


|