为什么把加法的懒惰标记在覆盖标记传递中清零了会wa
查看原帖
为什么把加法的懒惰标记在覆盖标记传递中清零了会wa
660770
abcdefgh111楼主2025/1/16 17:42

如题

change(p) 是 tree[p].change 代表覆盖标记

addj(p) 是 tree[p].addj 代表加法标记

inline void coverdown(int p) {
	int p2_l = p << 1;
	int p2_r = p << 1 | 1;

	if (change(p) != INF) {
		change(p2_l) = change(p);
		change(p2_r) = change(p);

		maxx(p2_l) = change(p);
		maxx(p2_r) = change(p);

		addj(p2_l) = 0;
		addj(p2_r) = 0;

		change(p) = INF;
        //addj(p) = 0;
	}
}

如果我在注释那里写了addj(p) = 0;会导致7 8 9 10数据点全错掉 删去了就可以ac

我实在想不通这是为什么 这有什么影响阿? 求助qaq

两次的提交记录:

ac:https://www.luogu.com.cn/record/198566681

wa: https://www.luogu.com.cn/record/198567910

我其实觉得反正要覆盖 所以给加法清零了没关系 但是却错了??苦思冥想也想不出来

2025/1/16 17:42
加载中...