Pagini recente » Cod sursa (job #2870279) | Cod sursa (job #627833) | Cod sursa (job #54403) | Cod sursa (job #2701515) | Cod sursa (job #865538)
Cod sursa(job #865538)
#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;
}