update函数为啥加上`if (ql <= mid)`就会WA
查看原帖
update函数为啥加上`if (ql <= mid)`就会WA
344633
oneton429楼主2020/11/7 11:11

代码如下

inline void pushup(int rt) {
    v[rt] = v[ls[rt]] + v[rs[rt]];
}

inline void pushdown(int l, int r, int rt) {
    v[rt] += tag[rt] * (r - l + 1);
    if (l != r)
        tag[ls[rt]] += tag[rt],
        tag[rs[rt]] += tag[rt];
    tag[rt] = 0;
}
void update(int l, int r, int rt, int ql, int qr, long long xg) {
    pushdown(l, r, rt);
    if (ql > r || qr < l)
        return;
    if (ql <= l && qr >= r) {
        tag[rt] += xg;
        pushdown(l, r, rt);
        return;
    }
    int mid = (l + r) >> 1;
    // if (ql <= mid)
        update(l, mid, ls[rt], ql, qr, xg);
    // if (qr > mid)
        update(mid + 1, r, rs[rt], ql, qr, xg);
    pushup(rt);
}

long long query(int l, int r, int rt, int ql, int qr) {
    pushdown(l, r, rt);
    if (ql > r || qr < l)
        return 0;
    if (ql <= l && qr >= r)
        return v[rt];
    int mid = (l + r) >> 1;
    long long res = 0;
    if (ql <= mid)
        res += query(l, mid, ls[rt], ql, qr);
    if (qr > mid)
        res += query(mid + 1, r, rs[rt], ql, qr);
    return res;
}

update函数里有两个注释,去掉它们就会WA掉

但是如果是query函数里就完全没问题

萌新想知道是什么原理

不过还有几hh就CSP了 没人回答我就背代码了/kk

2020/11/7 11:11
加载中...