树剖易错 :
节点序和dfs序(线段树上序)易混淆
整体二分易错:
rec数组的pushdown要先于 tag 的pushdown,
否则会出现 tag 的pushdown里先给 tag 赋值, 然后rec的pushdown里又把tag 和 sum 清零了
正确代码如下:
void pushdown(int u, int len) {
if (rec[u]) {
sum[u << 1] = sum[u << 1 | 1] = 0;
tag[u << 1] = tag[u << 1 | 1] = 0;
rec[u << 1] = 1;
rec[u << 1 | 1] = 1;
rec[u] = 0;
}
if (tag[u]) {
sum[u] += tag[u] * len;
tag[u << 1] += tag[u];
tag[u << 1 | 1] += tag[u];
tag[u] = 0;
}
}
错误代码如下:
void pushdown(int u, int len) {
if (rec[u]) {
sum[u] = tag[u] = 0;
rec[u << 1] = 1;
rec[u << 1 | 1] = 1;
rec[u] = 0;
}
if (tag[u]) {
sum[u] += tag[u] * len;
tag[u << 1] += tag[u];
tag[u << 1 | 1] += tag[u];
tag[u] = 0;
}
}
浙公网安备 33010602011771号