Pagini recente » Cod sursa (job #2874596) | Cod sursa (job #2131897) | Cod sursa (job #3156611) | Cod sursa (job #1632319) | Cod sursa (job #2593855)
#include <fstream>
using namespace std;
ifstream cin("aib.in");
ofstream cout("aib.out");
const int lim=1e5+3;
int tree[lim];
int n,m,tip,a,b;
void add(int k,int x)
{
while(k<=n)
{
tree[k]+=x;
k+=k&-k;
}
}
int sum(int k)
{
int s=0;
while(k>=1)
{
s+=tree[k];
k-=k&-k;
}
return s;
}
int look(int val)
{
if(val<sum(1) or val>sum(n))
return -1;
int l=1,r=n,med,s;
while(l<r)
{
med=(l+r)/2;
s=sum(med);
if(s>val)
r=med-1;
else if(s<val)
l=med+1;
else r=med;
}
if(sum(l)==val)
return l;
return -1;
}
/*int look(int val)
{
if(val<sum(1) or val>sum(n))
return -1;
int start=1,cnt=sum(1);
while(1)
{
if(cnt>val)
{
cnt-=tree[start];
start-=start&-start;
}
else if(cnt==val)
return start;
else
{
start+=start&-start;
cnt+=tree[start];
}
cout<<start<<' '<<cnt<<' '<<val<<'\n';
}
}*/
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(0),cout.tie(0);
cin>>n>>m;
for(int i=1;i<=n;++i)
cin>>a,add(i,a);
for(int w=1;w<=m;++w)
{
cin>>tip;
if(tip==0)
{
cin>>a>>b;
add(a,b);
continue;
}
if(tip==1)
{
cin>>a>>b;
cout<<sum(b)-sum(a-1)<<'\n';
continue;
}
cin>>a;
cout<<look(a)<<'\n';
}
return 0;
}