Pagini recente » Cod sursa (job #3283230) | Cod sursa (job #547754) | Cod sursa (job #196377) | Cod sursa (job #207213) | Cod sursa (job #875192)
Cod sursa(job #875192)
#include<cstdio>
#include<vector>
#include<queue>
#define N 100001
short int v[N];
int n,m;
#define maxp 1<<20
long long suma(int a, int b)
{
long long s=0;
for(int i=a;i<=b;++i)
s+=v[i];
return s;
}
int find(long val)
{
long pas=maxp,i;
int temp;
for(i=n;pas>0;pas>>=1)
{
temp = i-pas;
if(temp>0 && suma(1,temp)>=val)
i-=pas;
}
if(suma(1,temp)==val) return -1;
return i;
}
int main()
{
freopen("aib.in","r",stdin);
freopen("aib.out","w",stdout);
scanf("%d %d",&n,&m);
for(int i=1;i<=n;++i)
scanf("%hd",&v[i]);
int a,b;
while(m--)
{
scanf("%d",&a);
if(a==2)
{
scanf("%d",&b);
printf("%d\n",find(b));
}
else if(a==1)
{
scanf("%d %d",&a,&b);
printf("%lld \n",suma(a,b));
}
else
{
scanf("%d %d",&a,&b);
v[a]+=b;
}
}
return 0;
}