Pagini recente » Cod sursa (job #837727) | Cod sursa (job #2444491) | Cod sursa (job #1187982) | Cod sursa (job #2455788) | Cod sursa (job #1247542)
#include<cstdio>
#include<algorithm>
using namespace std;
int n,i,j,nr,k,a,b,m;
int AIB[100005];
void ADD(int x,int y)
{
int i;
for (i=x;i<=n;i=i+(i&(-i)))
AIB[i]+=y;
}
int SUM(int x)
{
int i,s=0;
for (i=x;i>=1;i=i-(i&(-i))) s=s+AIB[i];
return s;
}
int cb(int x)
{
int s,st,dr,m;
st=1; dr=n;
s=SUM(1);
if (s>x) return -1;
if (s==x) return 1;
s=SUM(n);
if (s<x) return -1;
if (s==x) return n;
while (st<=dr)
{
m=(st+dr)/2;
s=SUM(m);
if (s==x) return m;
if ((s<x)&&(SUM(m+1)>x)) return -1;
if (s<m) st=m+1;
else dr=m-1;
}
}
int main()
{
freopen("AIB.in","r",stdin);
freopen("AIB.out","w",stdout);
scanf("%d %d",&n,&m);
for (i=1;i<=n;i++)
{
scanf("%d",&nr);
ADD(i,nr);
}
while (m--)
{
scanf("%d",&nr);
if (nr==0)
{
scanf("%d %d",&a,&b);
ADD(a,b);
}
if (nr==1)
{
scanf("%d %d",&a,&b);
printf("%d\n",SUM(b)-SUM(a-1));
}
if (nr==2)
{
scanf("%d",&a);
printf("%d\n",cb(a));
}
}
return 0;
}