Pagini recente » Cod sursa (job #3134530) | Cod sursa (job #1981303) | Cod sursa (job #2921874) | Cod sursa (job #842906) | Cod sursa (job #2857937)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("aib.in");
ofstream fout("aib.out");
int const N=100005;
int n;
struct aib
{
//int v[N];
int v[N];
aib(){
fill(v , v + N , 0);
}
#define z(x) ((x)&(-x))
void add(int p,int x)
{
for(int i=p;i<=n;i+=z(i))
v[i]+=x;
}
int sum(int p)
{
int r=0;
for(int i=p;i>0;i-=z(i))
r+=v[i];
return r;
}
}g;
void caut(int x,int s=1,int d=n)
{
int m=(s+d)/2,a;
if(d<s)
{
if(g.sum(s)!=x)
fout<<"-1\n";
return;
}
a=g.sum(m);
if(a==x)
{
fout<<m<<'\n';
return;
}
if(a<x)
caut(x,m+1,d);
else
caut(x,s,m-1);
}
int main()
{
int q,al;
fin>>n>>q;
for(int i=1;i<=n;i++)
{
fin>>al;
g.add(i,al);
}
while(q--)
{
int a,x,y;
fin>>a;
if(a==2)
fin>>x;
else
fin>>x>>y;
if(a==0)
g.add(x,y);
if(a==1)
fout<<g.sum(y)-g.sum(x-1)<<'\n';
if(a==2)
caut(x);
}
}