Cod sursa(job #865538)

Utilizator iarbaCrestez Paul iarba Data 26 ianuarie 2013 17:04:00
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.75 kb
#include <cstdio>
using namespace std;
long a[15001],m,k,n,val1,val2,caz;
void aduna(long poz,long valoare)
{
	long z,aux;
	a[poz]+=valoare;
	z=0;aux=poz;
	while(aux%2==0){z++;aux/=2;}
	poz+=1<<z;
	if(poz<=n){aduna(poz,valoare);}
}
long suma(long poz)
{
	long z,aux;
if(poz==0){return 0;}
else{
	z=0;aux=poz;
	while(aux%2==0){z++;aux/=2;}
	aux=poz;poz-=1<<z;
	return a[aux]+suma(poz);
	}
}
int main()
{
	freopen("datorii.in","r",stdin);
	freopen("datorii.out","w",stdout);
	scanf("%ld%ld",&n,&m);
	for(k=1;k<=n;k++){
		scanf("%ld",&val2);
		aduna(k,val2);
					 }
	for(k=1;k<=m;k++){
		scanf("%ld%ld%ld",&caz,&val1,&val2);
		if(caz==0){aduna(val1,0-val2);}
		if(caz==1){printf("%ld\n",suma(val2)-suma(val1-1));}
					 }
	
return 0;
}