Pagini recente » Cod sursa (job #305415) | Cod sursa (job #2867353) | Cod sursa (job #1007403) | Clasament antrenament | Cod sursa (job #153250)
Cod sursa(job #153250)
#include <cstdio>
#include <cstring>
#define MAXN 15005
int A[MAXN], BIT[MAXN];
int n, m;
void BITAdd(int i, int v) {
if (i > n)
return;
int k;
for (k = 0; !(i & (1 << k)); ++ k)
;
//printf("poz %d zero %d add %d\n", i, k, i + (1 << k));
BIT[i] += v;
BITAdd(i + (1 << k), v);
}
int BITQuery(int r) {
if (r < 1)
return 0;
int k;
for (k = 0; !(r & (1 << k)); ++ k)
;
return BIT[r] + BITQuery(r - (1 << k));
}
int main() {
freopen("datorii.in", "r", stdin);
freopen("datorii.out", "w", stdout);
scanf("%d %d", &n, &m);
memset(BIT, 0, sizeof(BIT));
int i, v;
for (i = 1; i <= n; ++ i) {
scanf("%d", &v);
BITAdd(i, v);
}
int c, x, y;
for (i = 1; i <= m; ++ i) {
scanf("%d %d %d", &c, &x, &y);
if (c == 0) {
BITAdd(x, -y);
} else {
printf("%d\n", BITQuery(y) - BITQuery(x - 1));
}
}
/*for (i = 1; i <= n; ++ i)
printf("%d ", BIT[i]);
printf("\n");*/
return 0;
}