
如果你的代码是类似这样的
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);
}