Pagini recente » Cod sursa (job #875047) | Cod sursa (job #2573165) | Cod sursa (job #2118937) | Cod sursa (job #1669243) | Cod sursa (job #602365)
Cod sursa(job #602365)
#include<cstdio>
int n,t,i,a,b,c,V,A,LIM,v[132000];
int main()
{
freopen("aib.in","r",stdin);
freopen("aib.out","w",stdout);
scanf("%d%d",&n,&t);
for(LIM=1;LIM<=n;LIM<<=1);
for(i=1;i<=n;i++){scanf("%d",&V);for(a=i;a<=LIM;){v[a]+=V;A=a&(-a);a+=A;}}
for(;t;t--)
{
scanf("%d",&c);
if(!c)
{
scanf("%d%d",&a,&b);
for(;a<=LIM;){v[a]+=b;A=a&(-a);a+=A;}
continue;
}
if(c==1)
{
V=0;scanf("%d%d",&a,&b);a--;
for(;a;){A=a&(-a);V-=v[a];a-=A;}
for(a=b;a;){A=a&(-a);V+=v[a];a-=A;}
printf("%d\n",V);
continue;
}
scanf("%d",&V);
for(a=0,b=LIM;b;b>>=1)
{
if(a+b<=n&&V>=v[a+b]){a+=b;V-=v[a];}
if(!V)break;
}
V?printf("-1\n"):printf("%d\n",a);
}
}