update的时候,区间不要搞混
void update(int l, int r, int p = 1, int cl = 1, int cr = n) {
if (cl >= l && cr <= r) {
tree[p] = (r - l + 1) - tree[p];
mark[p] ^= 1;
return ;
}
push_down(p, cl, cr);
int mid = (cl + cr) >> 1;
if (mid >= l) update(l, r, ls(p), cl, mid);
if (mid < r) update(l, r, rs(p), mid + 1, cr);
tree[p] = tree[ls(p)] + tree[rs(p)];
}