Pagini recente » Cod sursa (job #1146151) | Cod sursa (job #711260) | Cod sursa (job #2020377) | Cod sursa (job #951019) | Cod sursa (job #211067)
Cod sursa(job #211067)
#include<stdio.h>
long n,a[100001],m,i,q,x,aa,b;
void pune(long p,long x)
{long y;
y=0;
while(p<=n)
{a[p]+=x;
while(!(p&(1<<y)))
++y;
p+=(1<<y);++y;}
}
void ia(long p,long x)
{long y;
y=0;
while(p<=n)
{a[p]-=x;
while(!(p&(1<<y)))
++y;
p+=(1<<y);++y;}
}
long suma(long p)
{long y,z;
y=0;z=0;
while(p>0)
{z+=a[p];
while(!(p&(1<<y)))
++y;
p-=(1<<y);++y;}
return z;
}
long cauta(long x)
{
long i,j,ii;
for(i=1;i<n;i<<=1);
for(j=0;i;i>>=1)
if(j+i<=n)
if(x>=a[i+j])
{j+=i,x-=a[j];if(x==0)return j;}
return -1;
}
int main()
{
freopen("datorii.in","r",stdin);
freopen("datorii.out","w",stdout);
scanf("%ld%ld",&n,&m);
for(i=1;i<=n;++i){scanf("%ld",&q);pune(i,q);}
for(i=1;i<=m;++i)
{scanf("%ld%ld%ld",&x,&aa,&b);
if(x==1)printf("%ld\n",suma(b)-suma(aa-1));
else ia(aa,b);
}
return 0;
}