Pagini recente » Cod sursa (job #3306159) | Cod sursa (job #1907682) | Cod sursa (job #3342886) | Cod sursa (job #1481874) | Cod sursa (job #3327902)
#include <bits/stdc++.h>
#define inf 2000000
using namespace std;
#define cin fin
#define cout fout
ifstream cin("aib.in");
ofstream cout("aib.out");
int n, a, b, q, x, y, op, aib[200000];
void update(int poz, int val)
{
for(int i=poz; i<=n; i+=(i&(-i)))
aib[i]+=val;
}
int query(int poz)
{
int s=0;
for(int i=poz; i>=1; i-=(i&(-i)))
s+=aib[i];
return s;
}
int caut(int target)
{
int st=1, dr=n;
while(st<=dr)
{
int mid=(st+dr)/2;
if(query(mid)>target)
dr=mid-1;
else if(query(mid)<target)
st=mid+1;
else
return mid;
}
return -1;
}
signed main()
{
cin>>n>>q;
for(int i=1; i<=n; i++)
{
cin>>x;
update(i,x);
}
while(q--)
{
cin>>op;
if(op==1)
{
cin>>a>>b;
cout<<query(b)-query(a-1)<<'\n';
}
else if(op==0)
{
cin>>a>>b;
update(a,b);
}
else if(op==2)
{
cin>>a;
cout<<caut(a)<<'\n';
}
}
}