Pagini recente » Cod sursa (job #1270506) | Cod sursa (job #3005255) | Cod sursa (job #2870666) | Cod sursa (job #3261982) | Cod sursa (job #361555)
Cod sursa(job #361555)
#include <stdio.h>
#define NMAX 16000
int N, M;
int A[NMAX];
class AIB {
private:
int size;
int aib[NMAX];
int lsb(int x) {
return (x ^ (x - 1)) & x;
}
public:
AIB(int N) {
size = N;
for (int i = 0; i <= N; i++) {
aib[i] = 0;
}
}
void add(int poz, int val) {
for (; poz <= size; poz += lsb(poz)) {
aib[poz] += val;
}
}
int query(int poz) {
int ret = 0;
for (; poz > 0; poz -= lsb(poz) ) {
ret = ret + aib[poz];
}
return ret;
}
int query_range(int a, int b) {
int val_a, val_b;
val_a = query(a - 1);
val_b = query(b);
return val_b - val_a;
}
};
int main()
{
freopen("datorii.in", "r", stdin);
freopen("datorii.out", "w", stdout);
scanf("%d %d ", &N, &M);
AIB arb(N);
for (int i = 1; i <= N; i++) {
int x;
scanf("%d ", &x);
arb.add(i, x);
}
for (int i = 1; i <= M; i++) {
int cod, x, y;
scanf("%d %d %d ", &cod, &x, &y);
if (cod == 1) {
printf("%d\n", arb.query_range(x, y));
} else {
arb.add(x, -y);
}
}
return 0;
}