进食后人
查看原帖
进食后人
1580057
zhe_chen_Aya楼主2025/8/30 21:23

如果你的代码是类似这样的

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);
}
2025/8/30 21:23
加载中...