Pagini recente » Cod sursa (job #31591) | Cod sursa (job #657043) | Cod sursa (job #1335232) | Cod sursa (job #2238585) | Cod sursa (job #587763)
Cod sursa(job #587763)
#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];}
x?printf("-1\n"):printf("%d\n",i);
}/*
int i, step;
for ( step = 1; step < N; step <<= 1 );
for( i = 0; step; step >>= 1 )
{
if( i + step <= N)
065.{
066.if( val >= Arb[i+step] )
067.{
068.i += step, val -= Arb[i];
069.if ( !val ) return i;
070.}
071.}
072.}
}
printf("%d\n",sol);*/
//end=(double)clock();
//printf("%lf\n",(end-start)/cps);
return 0;
}