Cod sursa(job #7936)

Utilizator root/boot/vmlinuz root Data 23 ianuarie 2007 00:44:14
Problema Datorii Scor 100
Compilator c Status done
Runda Arhiva de probleme Marime 0.73 kb
#include <stdio.h>

#define MN (15010)

int aib[MN];
int N, M;

void put(int p, int x)
{
	//printf("Going to insert %d at %d\n", x, p); fflush(stdout);
	for(; p <= N; p += ~(p-1)&p)
		//printf("pos %d\n", p), fflush(stdout), aib[p] += x;
		aib[p] += x;
}

int get(int p)
{
	int s = 0;
	for(; p > 0; p -= ~(p-1)&p)
		s += aib[p];
	return s;
}

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

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

	scanf("%d %d", &N, &M);
	for(i = 1; i <= N; i ++) {
		scanf("%d", &a);
		put(i, a);
	}

	for(i = 0; i < M; i ++) {
		scanf("%d %d %d\n", &a, &b, &c);
		if(a) {
			int tmp1 = get(b-1), tmp2 = get(c);
			printf("%d\n", tmp2-tmp1);
		} else put(b, -c);
	}

	fclose(stdin);
	fclose(stdout);

	return 0;
}