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