给定一个n个元素的数组,设计一个数据结构支持以下两种操作。
- Add(x,d)操作:让
增加d。
- Query(L,R):计算
。
// 二叉索引树
#include<stdio.h>
const int maxn = 10005;
int c[maxn];
int n;
int lowbit(int x) {
return x & (-x);
}
void add(int x, int d) {
while (x <= n) {
c[x] += d;
x += lowbit(x);
}
}
int sum(int x) {
int ret = 0;
while (x > 0) {
ret += c[x];
x -= lowbit(x);
}
return ret;
}
int main() {
int x, d;
scanf("%d", &n);
for (int i = 1; i <= n; i++) {
scanf("%d", &d);
add(i, d);
}
int op, l, r;
while (scanf("%d", &op) == 1) {
if (op) { // Query(L,R)
scanf("%d%d", &l, &r);
printf("%d\n", sum(r) - sum(l-1));
} else { // Add(x,d)
scanf("%d%d", &x, &d);
add(x, d);
}
}
return 0;
}