Cod sursa(job #312907)

Utilizator cotofanaCotofana Cristian cotofana Data 7 mai 2009 13:13:56
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.96 kb
#include <stdio.h>
#define dim 15002

int n, m, arb[4*dim+66], lo, hi, val, pos;

void update(int nod, int l, int r)
{
	if (l==r)
	{ 
		arb[nod]+=val;
		return;
	}
	int div=(l+r)/2;
	if (pos<=div) update(2*nod, l, div);
	else update(2*nod+1, div+1, r);
	arb[nod]=arb[2*nod]+arb[2*nod+1];
}

void query(int nod, int l, int r)
{
	if (lo<=l && r<=hi)
	{
		val+=arb[nod];
		return;
	}
	int div=(l+r)/2;
	if (lo<=div) query(nod*2, l, div);
	if (div<hi) query(nod*2+1, div+1, r);
}

int main()
{
	int i, op;
	freopen("datorii.in", "r", stdin);
	freopen("datorii.out", "w", stdout);
	scanf("%d %d\n", &n, &m);
	for (i=1; i<=n; i++)
	{
		scanf("%d ", &val);
		pos=i;
		update(1, 1, n);
	}
	for (i=1; i<=m; i++)
	{
		scanf("%d ", &op);
		if (!op)
		{
			scanf("%d %d\n", &pos, &val);
			val=-val;
			update(1, 1, n);
			continue;
		}
		scanf("%d %d\n", &lo, &hi);
		val=0;
		query(1, 1, n);
		printf("%d\n", val);
	}
	return 0;
}