如果你 WA 了,那么检查一下你的 Query 函数,不能直接 Merge 上去,要分类讨论。
Seg query (int node, int l, int r, int s, int t) {
if (s <= l && r <= t) return tree[node];
int mid = l + ((r - l) >> 1);
if (t <= mid) return query (node << 1, l, mid, s, t);
else if (s > mid) return query ((node << 1) + 1, mid + 1, r, s, t);
Seg L = query (node << 1, l, mid, s, t), R = query ((node << 1) + 1, mid + 1, r, s, t);
return merge (L, R);
}
Seg query (int node, int l, int r, int s, int t) {
if (s <= l && r <= t) return tree[node];
int mid = l + ((r - l) >> 1);
Seg L, R;
if (s <= mid) L = query (node << 1, l, mid, s, t);
if (t > mid) R = query ((node << 1) + 1, mid + 1, r, s, t);
return merge (L, R);
}