Pagini recente » Cod sursa (job #1651172) | Cod sursa (job #2157340) | Cod sursa (job #372950) | Cod sursa (job #1623879) | Cod sursa (job #385784)
Cod sursa(job #385784)
#include<cstdio>
#define N 100001
int c[N],val,q,x,y,n,m;
void update(int x)
{
for (;x<=n; x+=x^(x-1)&x)
c[x]+=val;
}
long long suma(int x)
{
int sum=0;
for (;x;x-=x^(x-1)&x)
sum+=c[x];
return sum;
}
int caut()
{
int p=1,u=n,m;
while (p!=u)
{
m=(p+u)>>1;
if (suma(m)<=x)
p=m+1;
else
u=m;
}
y=suma(p);
if (y>x)
--p;
y=suma(p);
if (y!=x)
return -1;
return p;
}
void citire()
{
freopen("aib.in","r",stdin);
freopen("aib.out","w",stdout);
scanf("%d%d",&n,&m);
for (int i=1; i<=n; ++i)
{
scanf("%d",&val);
update(i);
}
while (m--)
{
scanf("%d",&q);
if(!q)
{
scanf("%d%d",&x,&val);
update(x);
continue;
}
if (q==1)
{
scanf("%d%d",&x,&y);
--x;
printf("%lld\n",suma(y)-suma(x));
continue;
}
scanf("%d",&x);
printf("%d\n",caut());
}
}
int main()
{
citire();
return 0;
}