Cod sursa(job #161645)

Utilizator MirageRobert Sandu Mirage Data 18 martie 2008 17:15:38
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.67 kb
#include<stdio.h>
int m,n,v[15001];
int nrzero(int x){
	int r=1;
	while(!(x&1)){
		x>>=1;
		r<<=1;
	}
	return r;
}
void adauga(int i,int x){
	while(i<=n){
		v[i]+=x;
		i+=nrzero(i);
	}
}
int suma(int p){
	int s=0;
	while(p){
		s+=v[p];
		p-=nrzero(p);
	}
	return s;
}
void boom(){
	int i,x,w,p,q,z;
	scanf("%d%d",&n,&m);
	for(i=1;i<=n;++i){
		scanf("%d",&x);
		adauga(i,x);
	}
	for(i=1;i<=m;++i){
		scanf("%d",&w);
		if(w){
			scanf("%d%d",&p,&q);
			printf("%d\n",suma(q)-suma(p-1));
		}
		else{
			scanf("%d%d",&z,&x);
			adauga(z,-x);
		}
	}
}
int main(){
	freopen("datorii.in","r",stdin);
	freopen("datorii.out","w",stdout);
	boom();
	fclose(stdin);
	fclose(stdout);
	return 0;
}