Pagini recente » Cod sursa (job #2016736) | Statistici Moldovan Brendon (Brendon775) | Cod sursa (job #282371) | Statistici Marco Azarmaneche (marcoazar) | Cod sursa (job #587766)
Cod sursa(job #587766)
#include<cstdio>
//#include<ctime>
#define N 1<<17
int n,q,i,x,v,w,k,s[N];
int main()
{
//double start=(double)clock(),cps=(double)CLOCKS_PER_SEC,end;
freopen("aib.in","r",stdin);
freopen("aib.out","w",stdout);
scanf("%d%d",&n,&q);w=N;w--;
for(i=1;i<=n;i++)
{
scanf("%d",&x);
for(v=i;v&w;){s[v]+=x;v+=(v&-v);}
}
for(;q;q--)
{
scanf("%d",&k);
if(!k)
{
scanf("%d%d",&v,&x);
for(;v&w;){s[v]+=x;v+=(v&-v);}
continue;
}
if(k==1)
{
x=0;
scanf("%d",&v);for(v--;v;){x-=s[v];v-=(v&-v);}
scanf("%d",&v);for(;v;){x+=s[v];v-=(v&-v);}
printf("%d\n",x);continue;
}
scanf("%d",&x);
for(i=0,v=N;v&&x;v>>=1)
{
if(i+v<=n&&x>=s[i+v])
{
i+=v;
x-=s[i];
}
if(!x)break;
}
x?printf("-1\n"):printf("%d\n",i);
}
//end=(double)clock();
//printf("%lf\n",(end-start)/cps);
return 0;
}