Pagini recente » Cod sursa (job #734058) | Cod sursa (job #1961781) | Cod sursa (job #1312526) | Cod sursa (job #1953006) | Cod sursa (job #2601307)
#include <fstream>
using namespace std;
ifstream cin("aib.in");
ofstream cout("aib.out");
const int lim=1e5+3;
int n,m,tip,a,b;
int tree[lim];
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 bs(int x)
{
if(x<sum(1))
return -1;
int l=1,r=n,med;
while(l<r)
{
med=(l+r)/2;
int s=sum(med);
if(s>x)
r=med-1;
else if(s<x)
l=med+1;
else r=med;
}
if(x==sum(l))
return l;
return -1;
}
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 i=1;i<=m;++i)
{
cin>>tip;
if(tip==0)
{
cin>>a>>b;
add(a,b);
}
else if(tip==1)
{
cin>>a>>b;
cout<<sum(b)-sum(a-1)<<'\n';
}
else
{
cin>>a;
cout<<bs(a)<<'\n';
}
}
return 0;
}