Pagini recente » Cod sursa (job #1263758) | Cod sursa (job #1216900) | Cod sursa (job #1341724) | Cod sursa (job #3267752) | Cod sursa (job #3258781)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("aib.in");
ofstream fout("aib.out");
long long n,m,x,y,st,dr,mid,i,j,k,c,aib[100001];
bool ok;
void update(int p, int val){
for(;p<=n;p+=(p&-p))
aib[p] += val;
}
long long query(int p){
long long sum=0;
for(;p>0;p-=(p&-p))
sum += aib[p];
return sum;
}
int main()
{
ios::sync_with_stdio(false);
fin.tie(0);
fout.tie(0);
fin>>n>>m;
for(i=1;i<=n;i++)
fin>>x,update(i,x);
while(m--){
fin>>c;
if(c == 0){
fin>>x>>y;
update(x, y);
}else if(c == 1){
fin>>x>>y;
fout<<query(y)-query(x-1)<<'\n';
}else{
fin>>x;
ok=0;
st=1; dr=n;
while(st<=dr){
mid = (st+dr)/2;
y = query(mid);
if(y == x){
ok=1;
fout<<mid<<'\n';
break;
}
if(y<x)
st = mid+1;
else
dr = mid-1;
}
if(!ok)
fout<<"-1\n";
}
}
return 0;
}