线段树板子写炸了
大佬帮找找错吧
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
const int maxn = 1e5 + 10;
long long n, m, op, x, y, a[maxn], w[maxn << 2], lazy_tag[maxn << 2];
bool in_range(long long L, long long R, long long l, long long r) {
return L >= l && R <= r;
}
bool out_range(long long L, long long R, long long l, long long r) {
return r < L || R < l;
}
void push_up(long long u) {
w[u] = w[u << 1] + w[(u << 1) + 1];
return ;
}
void make_tag(long long u, long long l, long long r, long long x) {
lazy_tag[u] += x;
w[u] += (r - l + 1) * x;
return ;
}
void push_down(long long u, long long l, long long r) {
make_tag(u << 1, l, l + r >> 1, lazy_tag[u]);
make_tag((u << 1) + 1, (l + r >> 1) + 1, r, lazy_tag[u]);
lazy_tag[u] = 0;
return ;
}
void build(long long u, long long l, long long r) {
if (l == r) {
w[u] = a[l];
return ;
}
build(u << 1, l, l + r >> 1);
build((u << 1) + 1, (l + r >> 1) + 1, r);
push_up(u);
return ;
}
void update_point(long long u, long long l, long long r, long long p, long long x) {
if (l == r) {
w[u] += x;
return ;
}
if (p <= (l + r >> 1)) update_point(u << 1, l, l + r >> 1, p, x);
else update_point((u << 1) + 1, (l + r >> 1) + 1, r, p, x);
push_up(u);
return ;
}
void update(long long u, long long l, long long r, long long L, long long R, long long x) {
if (out_range(l, r, L, R)) return ;
if (in_range(l, r, L, R)) {
make_tag(u, l, r, x);
return ;
}
push_down(u, l, r);
update(u << 1, l, l + r >> 1, L, R, x);
update((u << 1) + 1, l, (l + r >> 1) + 1, L, R, x);
push_up(u);
return ;
}
long long query(long long u, long long l, long long r, long long L, long long R) {
if (in_range(l, r, L, R)) return w[u];
if (out_range(l, r, L, R)) return 0;
push_down(u, l, r);
return query(u << 1, l, l + r >> 1, L, R) + query((u << 1) + 1, (l + r >> 1) + 1, r, L, R);
}
int main() {
scanf("%lld %lld", &n, &m);
for (int i = 1; i <= n; i++) scanf("%lld", a + i);
build(1, 1, n);
while (m--) {
scanf("%lld %lld %lld", &op, &x, &y);
if (op == 1) update_point(1, 1, n, x, y);
else printf("%lld\n", query(1, 1, n, x, y));
}
return 0;
}