Pagini recente » Cod sursa (job #1702374) | Clasament oni2011-scdtry | Cod sursa (job #148098) | Cod sursa (job #3247574) | Cod sursa (job #788772)
Cod sursa(job #788772)
#include <cstdio>
#define Max 100001
int n,a[Max];
void update(int idx,int val)
{
while(idx<=n)
{
a[idx]+=val;
idx+=idx&-idx;
}
}
int read(int idx)
{
int sum=0;
while(idx>0)
{
sum+=a[idx];
idx-=idx&-idx;
}
return sum;
}
int c_bin(int x)
{
int l=1,r=n,m;
while(l<r)
{
m=(l+r)/2;
if(read(m)>=x)r=m; else l=m+1;
}
return read(r)==x?r:-1;
}
int main()
{
int m,c,x,y;
freopen("aib.in","r",stdin);
freopen("aib.out","w",stdout);
scanf("%d %d",&n,&m);
for(int i=1;i<=n;i++)
{
scanf("%d",&y);
update(i,y);
}
while(m--)
{
scanf("%d",&c);
switch(c)
{
case 0: scanf("%d %d",&x,&y); update(x,y); break;
case 1: scanf("%d %d",&x,&y); printf("%d\n",read(y)-read(x-1)); break;
case 2: scanf("%d",&x); printf("%d\n",c_bin(x)); break;
}
}
return 0;
}