const int N = 1005;
int n, a[N], tree[N * 4], lzy[N * 4];
void push_up(int rt) {
tree[rt] = tree[rt * 2] + tree[rt * 2 + 1];
}
void push_down(int rt) {
if (lzy[rt]) {
lzy[rt * 2] += lzy[rt];
lzy[rt * 2 + 1] += lzy[rt];
a[rt * 2] += lzy[rt];
a[rt * 2 + 1] += lzy[rt];
lzy[rt] = 0;
}
}
void build(int rt, int l, int r) {
if (l == r) tree[rt] = a[l];
else {
int m = (l + r) / 2;
build(rt * 2, l, m);
build(rt * 2 + 1, m + 1, r);
push_up(rt);
}
}
void update(int L, int R, int v, int l, int r, int k) {
if (L <= l && r <= R) {
lzy[k] += v;
a[k] += v;
} else {
push_down(k);
int m = (l + r) / 2;
if (L <= m) update(L, R, v, l, m, k * 2);
if (R > m) update(L, R, v, m + 1, r, k * 2 + 1);
push_up(k);
}
}
int query(int L, int R, int l, int r, int k) {
if (L <= l && r <= R) return a[k];
else {
push_down(k);
int m = (l + r) / 2, ans = 0;
if (L <= m) ans += query(L, R, l, m, k * 2);
if (R > m) ans += query(L, R, m + 1, r, k * 2 + 1);
return ans;
}
}
我的线段树模板有误,大佬帮忙康康吧