Cod sursa(job #542647)

Utilizator andrei.dAndrei Diaconeasa andrei.d Data 26 februarie 2011 18:46:01
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.69 kb
#include <cstdio>

#define file_in "datorii.in"
#define file_out "datorii.out"

#define lsb(x) (((x)&((x)-1))^(x))

int n,x,aib[101000],i,st,dr,tip,m;

void add(int poz, int val){
	
	int i;
	
	for (i=poz;i<=n;i+=lsb(i))
		 aib[i]+=val;
}

int query(int poz){
	
	int i,ret=0;
	
	for (i=poz;i>=1;i-=lsb(i))
		 ret+=aib[i];
	return ret;
}



int main(){
	
	freopen(file_in,"r",stdin);
	freopen(file_out,"w",stdout);
	
	scanf("%d %d", &n,&m);
	for (i=1;i<=n;++i){
		 scanf("%d", &x);
		 add(i,x);
	}
	
	while(m--){
		
		scanf("%d %d %d", &tip, &st, &dr);
		
		if (tip==0)
			add(st,-dr);
		else
			printf("%d\n", query(dr)-query(st-1));
	}
	
	return 0;
	
}