Cod sursa(job #145578)

Utilizator ProtomanAndrei Purice Protoman Data 28 februarie 2008 23:08:14
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.93 kb
#include <stdio.h>
#define mx 60010
long n,a,b,c,i,m,s;
long ai[mx];

void add(long nod, long p, long u, long poz, long val)
{
	long m;
	if (p==u)
		ai[nod]=ai[nod]+val;
	else
	{
		m=(p+u)/2;
		if (poz<=m)
			add(2*nod,p,m,poz,val);
		if (m<poz)
			add(2*nod+1,m+1,u,poz,val);
		ai[nod]=ai[2*nod]+ai[2*nod+1];
	}
}

void query(long nod, long p, long u)
{
	long m;
	if (a<=p && u<=b)
	{
		s+=ai[nod];
		return;
	}
	if (p<u)
	{
		m=(p+u)/2;
		if (a<=m)
			query(2*nod,p,m);
		if (m<b)
			query(2*nod+1,m+1,u);
	}
}

int main()
{
	freopen("datorii.in","r",stdin);
	freopen("datorii.out","w",stdout);
	scanf("%ld %ld",&n,&m);
	for (i=1; i<=n; i++)
	{
		scanf("%ld",&a);
		add(1,1,n,i,a);
	}
	for (i=1; i<=m; i++)
	{
		scanf("%ld %ld %ld",&c,&a,&b);
		if (c==0)
			add(1,1,n,a,-b);
		else 
		{
			s=0;
			query(1,1,n);
			printf("%ld\n",s);
		}
	}
	fclose(stdin);
	fclose(stdout);
	return 0;
}