为什么本题线段树合并写法一定要新开一个节点。
int Merge(int u, int v, int l, int r) {
if (!u || !v) return u + v;
int mid = (l + r) >> 1, x = ++rtot;
seg[x].sum = seg[u].sum + seg[v].sum;
lc(x) = Merge(lc(u), lc(v), l, mid);
rc(x) = Merge(rc(u), rc(v), mid + 1, r);
return x;
}
错误的
void Merge(int &u, int &v, int l, int r) {
if (!u || !v) { u += v; return; }
seg[u].sum += seg[v].sum;
if (l == r) return;
int mid = (l + r) >> 1;
Merge(lc(u), lc(v), l, mid), Merge(rc(u), rc(v), mid + 1, r);
}