Cod sursa(job #574846)

Utilizator dcm9000Dinu Cristian Mircea - UPB dcm9000 Data 7 aprilie 2011 16:51:10
Problema Datorii Scor 100
Compilator c Status done
Runda Arhiva de probleme Marime 0.69 kb
#include <stdio.h>

int n, m;

int a[15001];

static void update(int idx, int val) {
	while(idx <= n) {
		a[idx] += val;
		idx += (idx & -idx);		
	}
}

static int get(int idx) {
	int sum = 0;
	while(idx) {
		sum += a[idx];
		idx -= (idx & -idx);
	}
	return sum;
}

static int getAB(int a, int b) {
	return get(b) - get(a - 1);
}

int main() {

	int i;
	int tmp, p, q;

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

	scanf("%d %d", &n, &m);

	for(i = 1; i <= n; ++i) {
		scanf("%d", &tmp);
		update(i, tmp);
	}

	while(m--) {
		scanf("%d %d %d", &tmp, &p, &q);
		if(tmp) {
			printf("%d\n", getAB(p, q));
		}
		else {
			update(p, -q);
		}
	}

	fclose(stdout);
	return 0;
}