关于可刺激化修道士表舅已经黑。
因为傻逼 lxd 告诉我我的表舅已经黑写法是错误的,所以稀里糊涂的让他改成了他的那种写法。但是我的也是对的。
比如区间加和区间查和,维护一个 \(tag\),表示表舅的值。然后在区间加的时候,经过的区间的 \(sum\) 的值可以直接加,但是只有在
if (x <= l && r <= y) {
tag[root] += d;
return root;
}
的时候才加上 \(tag\)。询问的时候加上沿途的表舅,最后统计加上就好了。NB 区间长度,取 \(\max\) 和 \(\min\)(见下面代码)。
int ask(int l, int r, int p, int x, int y, int add) { // x y -> segment tree
int len = min(r, y) - max(l, x) + 1; // look here
if (x <= l && r <= y) return sum[p] + len * add; // 加上贡献
int mid = l + r >> 1, ans = 0;
if (x <= mid) ans += ask(l, mid, son[p][0], x, y, add + tag[p]); // 统计贡献
if (y > mid) ans += ask(mid + 1, r, son[p][1], x, y, add + tag[p]); // 统计贡献
return ans;
}
总之就是这样维护就可以了。应该是对自己有起到一个提升的作用。
标签:修道士,int,永久化,tag,ans,区间,表舅 From: https://www.cnblogs.com/liuzimingc/p/black-black.html