Cod sursa(job #461209)

Utilizator darrenRares Buhai darren Data 5 iunie 2010 22:02:34
Problema Datorii Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1 kb
#include<cstdio>

int n, m, a, b, p, v, sum;
int ari[40000];

void update(int nod, int st, int dr)
{
	ari[nod] += v;
	if (st != dr)
	{
		int md = (st + dr) >> 1;
		if (p <= md) update(nod << 1, st, md);
		else         update((nod << 1) + 1, md + 1, dr);
	}
}

void query(int nod, int st, int dr)
{
	if (a <= st && dr <= b)
		sum += ari[nod];
	else
	{
		int md = (st + dr) >> 1;
		if (a <= md) query(nod << 1, st, md);
		if (b > md)  query((nod << 1) + 1, md + 1, dr);
	}
}

int main()
{
	freopen("datorii.in", "r", stdin);
	freopen("datorii.out", "w", stdout);
	scanf("%d %d", &n, &m);
	
	int aux;
	for (int i = 1; i <= n; ++i)
	{
		scanf("%d", &aux);
		p = i, v = aux;
		update(1, 1, 1000);
	}
	for (int i = 1; i <= m; ++i)
	{
		scanf("%d", &aux);
		switch (aux)
		{
		case 0:
			scanf("%d %d", &p, &v);
			v = -v;
			update(1, 1, 1000);
			break;
		case 1:
			scanf("%d %d", &a, &b);
			sum = 0;
			query(1, 1, 1000);
			printf("%d\n", sum);
			break;
		}
	}
}