Pagini recente » Istoria paginii runda/bomba/clasament | Autentificare | Istoria paginii runda/test123321/clasament | Rotatie lexicografic minima | Cod sursa (job #2803757)
#include <assert.h>
#include <stdio.h>
#define MAXN 15000
int n;
int aib[MAXN + 1];
void
update (int poz, int val) {
int i;
for (i = poz; i <= n; i += (i & (-i)))
aib[i] += val;
}
int
compute (int poz) {
int ret = 0;
int i;
for (i = poz; i > 0; i -= (i & (-i)))
ret += aib[i];
return ret;
}
int main () {
int q;
int i;
assert(freopen("datorii.in", "r", stdin));
assert(freopen("datorii.out", "w", stdout));
assert(scanf("%d %d", &n, &q) == 2);
for (i = 0; i != n; ++ i) {
int a;
assert(scanf(" %d", &a) == 1);
update(i + 1, a);
}
for (i = 0; i != q; ++ i) {
int tip, a, b;
assert(scanf(" %d %d %d", &tip, &a, &b) == 3);
switch (tip) {
case 0:
update(a, -b);
break;
case 1:
printf("%d\n", compute(b) - compute(a - 1));
break;
default:
assert(0);
}
}
}