Cod sursa(job #479350)

Utilizator proxenetuNea Caisa proxenetu Data 23 august 2010 19:03:24
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.61 kb
#include <stdio.h>
#define maxN 	15100
#define lsb(x)	((x ^ (x - 1)) & x)

int aib[maxN], N, M;

int query (int a) {
	int sum = 0;
	for (; a; a -= lsb(a))
		sum += aib[a];
	return sum;
}

void update (int poz, int val) {
	for (; poz <= N; poz += lsb(poz))
		aib[poz] += val;
}

int main () {
	int a, b, i, t;

	freopen("datorii.in", "r", stdin);
	freopen("datorii.out", "w", stdout);

	scanf("%d%d", &N, &M);

	for (a = 1; a <= N; ++ a) {
		scanf("%d", &b);
		update(a, b);
	}

	for (i = 1; i <= M; ++ i) {
		scanf("%d%d%d", &t, &a, &b);
		if (t == 0)
			update(a, - b);
		else
			printf("%d\n", query(b) - query(a - 1));
	}
}