Pagini recente » Cod sursa (job #2187493) | Cod sursa (job #1616305) | Cod sursa (job #2075486) | Cod sursa (job #3182396) | Cod sursa (job #188500)
Cod sursa(job #188500)
#include<cstdio>
long n,m,t[100005];
long long q;
using namespace std;
void upd(long i,long x)
{
for(;i<=n;i+=i&-i)
t[i]+=x;
}
long long ask(long i)
{
long long s=0;
for(;i;i-=i&-i)
s+=t[i];
return s;
}
void binsh(long long x)
{
long l=1,r=n;
while(l<=r)
{
long m=(l+r)/2;
if(x==ask(m))
{
printf("%ld\n",m);
return;
}
if(x<ask(m))
r=m-1;
else
l=m+1;
}
printf("-1\n");
}
void rd()
{
scanf("%ld%ld",&n,&m);
long i,x,y,p;
for(i=1;i<=n;i++)
{
scanf("%ld",&x);
upd(i,x);
}
for(i=1;i<=m;i++)
{
scanf("%ld",&p);
if(p==0)
{
scanf("%ld%ld",&x,&y);
upd(x,y);
}
else if(p==1)
{
scanf("%ld%ld",&x,&y);
printf("%lld\n",ask(y)-ask(x-1));
}
else
{
scanf("%lld",&q);
binsh(q);
}
}
}
int main()
{
freopen("aib.in","r",stdin);
freopen("aib.out","w",stdout);
rd();
return 0;
}