如果你的代码是类似这样的
void updata(ll x, ll l, ll r)
{
if (l == t[x].l && r == t[x].r)
{
t[x].add ^= 1;
t[x].n = t[x].r - t[x].l + 1 - t[x].n;
return;
}
if (r > t[x << 1].r)
updata(x << 1 ^ 1, max(t[x << 1 ^ 1].l, l), r);
if (l < t[x << 1 ^ 1].l)
updata(x << 1, l, min(t[x << 1].r, r));
pushup(x);
}
要在修改前pushdown
void updata(ll x, ll l, ll r)
{
if (l == t[x].l && r == t[x].r)
{
t[x].add ^= 1;
t[x].n = t[x].r - t[x].l + 1 - t[x].n;
return;
}
pushdown(x);
if (r > t[x << 1].r)
updata(x << 1 ^ 1, max(t[x << 1 ^ 1].l, l), r);
if (l < t[x << 1 ^ 1].l)
updata(x << 1, l, min(t[x << 1].r, r));
pushup(x);
}