Pagini recente » Cod sursa (job #3139589) | Cod sursa (job #1419367) | Cod sursa (job #43586) | Cod sursa (job #1439336) | Cod sursa (job #651402)
Cod sursa(job #651402)
#include<stdio.h>
//ultimul bit de 1 este (x ^ (x-1)) & x
int n,a[15005],aib[15005];
void update(int i, int val)
{
while(i<=n)
{
aib[i]+=val;
i+=((i^(i-1))+1)>>1;
}
}
int query(int i)
{
int nr=0;
if(i==1)
return aib[i];
while(i>1)
{
nr=nr+aib[i];
i-=((i^(i-1))+1)>>1;
}
return nr;
}
int main()
{
freopen("datorii.in","r",stdin);
freopen("datorii.out","w",stdout);
int m,i,j,k,x;
scanf("%d%d",&n,&m);
for(i=1;i<=n;++i)
{
scanf("%d",&a[i]);
update(i,a[i]);
}
for(i=1;i<=m;++i)
{
scanf("%d",&k);
if(k==0)
{
scanf("%d%d",&x,&j);
update(x,-j);
}
else
{
scanf("%d%d",&x,&j);
printf("%d\n",query(j)-query(x-1));
}
}
return 0;
}