Cod sursa(job #389445)

Utilizator ConsstantinTabacu Raul Consstantin Data 1 februarie 2010 18:05:57
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.89 kb
#include<stdio.h>
int v[ 40000 ],i,j,k,l,m,n,a,b,ok;

void update(int nod,int p,int u,int poz,int val){
if(p == u)
	{v[nod]+=val;return;}
int m = (p+u)>>1;

if(poz <= m)
	update(2*nod,p,m,poz,val);
else
	update(2*nod+1,m+1,u,poz,val);

v[nod] = v[2*nod] + v[2*nod + 1];
}

int querry(int nod,int p,int u,int a,int b){
	if(a <= p && u <= b)return v[nod];
	if(u < a)return 0;
	if(b < p)return 0;
	int m = (p+u)>>1;
	int x = 0,y = 0;
	if(p <= m )
		x = querry(2*nod,p,m,a,b);
	if(m < u)
		y = querry(2*nod+1,m+1,u,a,b);
	return x+y;
	
}

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",&a);
	update(1,1,n,i,a);
	}
	
for(i = 1; i <= m ; i++)
	{scanf("%d %d %d",&ok,&a,&b);
	if(ok == 1)
		printf("%d\n",querry(1,1,n,a,b));
	else
		update(1,1,n,a,b*(-1));
	}
	
return 0;}