Cod sursa(job #644634)

Utilizator Eugen01Vasilescu Eugen Eugen01 Data 7 decembrie 2011 11:08:23
Problema Datorii Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.88 kb
#include<stdio.h>

int type,sol,x,y,i,j,n,m,H[30009];

void update(int nod,int st,int dr,int poz,int x)
{
	int m=(st+dr)/2;;
	
	if (st==dr) 
	{
		H[nod]-=x;
		return;
	}
	
	if (poz<=m) update(nod<<1,st,m,poz,x);
		else update((nod<<1)+1,m+1,dr,poz,x);
	
	H[nod]=H[(nod<<1)]+H[(nod<<1)+1];
}

void querry(int nod,int st,int dr,int a,int b)
{
	int m=(st+dr)/2;;
	
	if (a<=st&&dr<=b)
	{
		sol+=H[nod];
		return;
	}

	if (a<=m) querry(nod<<1,st,m,a,b);
	if (b>m) querry((nod<<1)+1,m+1,dr,a,b);
}

int main()
{
	freopen("datorii.in","r",stdin);
	freopen("datorii.out","w",stdout);
	
	scanf("%d%d",&n,&m);
	
	for (i=1;i<=n;i++)
	{
		scanf("%d",&x);
		update(1,1,n,i,-x);
	}
	
	for (i=1;i<=m;i++)
	{
		scanf("%d%d%d",&type,&x,&y);
		if (type==0) update(1,1,n,x,y);
			else 
			{
				sol=0;
				querry(1,1,n,x,y);
				printf("%d\n",sol);
			}
	}
}