Cod sursa(job #1280544)

Utilizator TarabanDragosTaraban Dragos-Petru TarabanDragos Data 2 decembrie 2014 07:58:34
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.9 kb
#include<cstdio>
int n,m,i,j,v[400100],op,p,x,a,b,s;
FILE *f,*g;
void upd(int nod,int l,int r,int p,int x){
	if(l==r){
		v[nod]+=x;
		return;
	}
	int mid=(l+r)/2;
	if(p<=mid)
		upd(2*nod,l,mid,p,x);
	if(p>mid)
		upd(2*nod+1,mid+1,r,p,x);
	v[nod]=v[2*nod]+v[2*nod+1];
}
void query(int nod,int l,int r,int a,int b){
	if(a<=l&&r<=b){
		s+=v[nod];
		return;
	}
	int mid=(l+r)/2;
	if(a<=mid){
		query(2*nod,l,mid,a,b);
	}
	if(b>mid){
		query(2*nod+1,mid+1,r,a,b);
	}
}
int main(){
	f=fopen("datorii.in","r");
	g=fopen("datorii.out","w");
	fscanf(f,"%d%d",&n,&m);
	for(i=1;i<=n;i++){
		fscanf(f,"%d",&x);
		upd(1,1,n,i,x);
	}
	for(i=1;i<=m;i++){
		fscanf(f,"%d",&op);
		if(op==0){
			fscanf(f,"%d%d",&p,&x);
			upd(1,1,n,p,-x);
		}
		else{
			s=0;
			fscanf(f,"%d%d",&a,&b);
			query(1,1,n,a,b);
			fprintf(g,"%d\n",s);
		}
	}



	fclose(f);
	fclose(g);
	return 0;
}