可持久化线段树标记永久化?可刺激化修道士表舅已经黑!

发布时间 2023-08-25 15:08:29作者: liuzimingc

关于可刺激化修道士表舅已经黑。

因为傻逼 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;
} 

总之就是这样维护就可以了。应该是对自己有起到一个提升的作用。