Cod sursa(job #461208)

Utilizator darrenRares Buhai darren Data 5 iunie 2010 22:01:09
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)
		return;
	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];
		return;
	}
	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;
		}
	}
}