Cod sursa(job #201679)

Utilizator maria_pparcalabescu maria daniela maria_p Data 2 august 2008 19:50:54
Problema Arbori indexati binar Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.8 kb
#include<cstdio>
long c[100100],a,b,s,n,m,x,i,op;
void modif(long poz, long val){
	long x=0;
	while(poz<=n){
		c[poz]+=val;
		while((poz & (1 << x)) ==0)
			x++;
		poz+=(1 << x);
		x++;
	}
}
long suma(long dr){
	long s=0,x=0;
	while(dr>0){
		s+=c[dr];
		while((dr & (1 << x))==0)
			x++;
		dr-=(1 << x);
		x++;
	}
	return s;
}
int main(){
	freopen("aib.in","r",stdin);
	freopen("aib.out","w",stdout);
	scanf("%ld%ld",&n,&m);
	for(i=1;i<=n;i++){
		scanf("%ld",&x);
		modif(i,x);
	}
	for(;m>0;m--){
		scanf("%ld",&op);
		if(op==0){
			scanf("%ld%ld",&a,&b);
			modif(a,b);
		}
		if(op==1){
			scanf("%ld%ld",&a,&b);
			s=suma(b)-suma(a-1);
			printf("%ld\n",s);
		}
		if(op==2){
			scanf("%ld",&a);
			printf("-1\n");
		}
	}
	fclose(stdin);
	fclose(stdout);
	return 0;
}