Pagini recente » Cod sursa (job #2628834) | Cod sursa (job #3145050) | Cod sursa (job #1211960) | Cod sursa (job #1456128) | Cod sursa (job #3145042)
#include<iostream>
using namespace std;
const int NMAX=1e5;
int v[NMAX],n,m,aib[NMAX];
void update(int pos, int val){
while(pos<=n){
aib[pos]+=val;
pos+=(pos&-pos);
}
}
int parSum(int pos){
int sum=0;
while(pos>0){
sum+=aib[pos];
pos-=(pos&-pos);
}
return sum;
}
int cautbin(int k){
int index=0;
for(int bit=16;bit>=0;bit--){
index+=1<<bit;
if(index>n||parSum(index)>k){
index-=1<<bit;
}
}
if(parSum(index)==k){
return index;
}
return -1;
}
int main(){
freopen("aib.in","r",stdin);
freopen("aib.out","w",stdout);
cin>>n>>m;
for(int i=1;i<=n;i++){
cin>>v[i];
update(i, v[i]);
}
while(m--){
int t;
cin>>t;
if(t==0){
int pos,val;
cin>>pos>>val;
update(pos,val);
}else if(t==1){
int l,r;
cin>>l>>r;
cout<<parSum(r)-parSum(l-1)<<'\n';
}else{
int k;
cin>>k;
cout<<cautbin(k)<<'\n';
}
}
}