Cod sursa(job #331899)

Utilizator antoanelaAntoanela Siminiuc antoanela Data 15 iulie 2009 17:35:14
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.83 kb
#include <cstdio>

int v[60000], n, m, p, x, s, a, b;

void update (int nod, int l , int r)
{
	int m;
	if (l==r) v[nod]+=x; else
	{
		m=(l+r)/2;
		if (p<=m) update (2*nod, l, m); 
		else update (2*nod+1, m+1, r);
		v[nod]=v[2*nod] + v[2*nod +1];
	}
}			

void query (int nod, int l, int r)
{
	int m;
	if (a<=l && r<=b) s+=v[nod]; else
	{
		m=(l+r)/2;
		if (a<=m) query (nod*2, l, m);
		if (m<b) query (nod*2+1, m+1, r);
	}
}

int main()
{
	freopen("datorii.in","r",stdin);
	freopen("datorii.out","w",stdout);
	scanf("%d %d", &n, &m);
	int i;
	for (i=1; i<=n; i++) 
	{
		scanf("%d",&x);
		p=i;
		update(1, 1, n);
	}
	int t;
	while (m--)
	{
		scanf("%d %d %d", &t, &a, &b);
		if (!t)
		{
			x=-b;
			p=a;
			update(1, 1, n);
		} else
		{
			s=0;
			query(1, 1, n);
			printf("%d\n",s);
		}
	}
}