Cod sursa(job #165494)

Utilizator mihai0110Bivol Mihai mihai0110 Data 26 martie 2008 09:11:30
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.81 kb
#include<stdio.h>
int mod,val,poz,n,m,i,x,y,s;
int arb[100000];
void refresh(int nod,int li,int ls)
{
	int mij=(li+ls)/2;
	arb[nod]+=val;
	if(li<ls)
		if(poz<=mij)
			refresh(nod*2,li,mij);
		else
			refresh(nod*2+1,mij+1,ls);
}
void query(int nod,int li,int ls)
{
	int mij=(li+ls)/2;
	if(x<=li&&y>=ls)
		s+=arb[nod];
	else
	{
	if(x<=mij)
		query(nod*2,li,mij);
	if(y>mij)
		query(nod*2+1,mij+1,ls);
	}
}
int main(void)
{
	freopen("datorii.in","r",stdin);
	freopen("datorii.out","w",stdout);
	scanf("%d%d",&n,&m);
	for(i=1;i<=n;i++)
	{
		scanf("%d",&val);
		poz=i;
		refresh(1,1,n);
	}
	for(i=1;i<=m;i++)
	{
		scanf("%d%d%d",&mod,&x,&y);
		if(mod)
		{
			s=0;
			query(1,1,n);
			printf("%d\n",s);
		}
		else
		{
			poz=x;
			val=-y;
			refresh(1,1,n);
		}
	}
	return 0;
}