Pagini recente » Cod sursa (job #2102229) | Cod sursa (job #188146) | Cod sursa (job #1429511) | Cod sursa (job #2503321) | Cod sursa (job #189134)
Cod sursa(job #189134)
#include<stdio.h>
int t[100001],i,j,x,n,v,q,w,s1,s2,s,m;
void build(int a,int b)
{ for(;a<=n;a+=a&-a)
t[a]+=b;
}
void suma(int p)
{ s=0;
for(;p>=1;p-=p&-p)
s=s+t[p];
}
void ver(int q)
{ int l=1;
int r=n;
while(l<=r)
{ int y=(l+r)/2;
suma(y);
if(s==q)
{ printf("%d\n",y);
return; }
else
{if(s<q) l=y+1;
if(s>q) r=y-1;
} }
printf("-1\n");
}
int main()
{freopen("aib.in","r",stdin);
freopen("aib.out","w",stdout);
scanf("%d",&n);
scanf("%d",&m);
for(i=1;i<=n;i++)
{ scanf("%d",&x);
build(i,x);
}
for(i=1;i<=m;i++)
{ scanf("%d",&v);
if(v==0)
{ scanf("%d%d",&q,&w);
build(q,w);
}
if(v==1)
{ scanf("%d%d",&q,&w);
suma(w);
s1=s;
suma(q-1);
s2=s;
s=s1-s2;
printf("%d\n",s);
}
if(v==2)
{scanf("%d",&q);
ver(q);
}
}
return 0;
}