记得每个节点的懒标记都要清空啊,要不然像我一样只清空了叶子节点。
struct SegTree {
int val, tag;
SegTree(int _val = 0, int _tag = 0) : val(_val), tag(_tag) { }
#define ls(p) (p << 1)
#define rs(p) (p << 1 | 1)
#define mid(l, r) (l + r >> 1)
} tr[N << 2];
void build(int p, int l, int r) {
if (l == r) return tr[p] = SegTree(f[l]), void();
build(ls(p), l, mid(l, r));
build(rs(p), mid(l, r) + 1, r);
pushup(p);
}