Pagini recente » Cod sursa (job #2928216) | Cod sursa (job #1818615) | Cod sursa (job #34426) | Cod sursa (job #1779138) | Cod sursa (job #3197735)
#include <bits/stdc++.h>
using namespace std;
const int MAXN=1e5;
int aib[MAXN+1];
int n;
int query(int x){
int rez;
rez=0;
for(; x>=1; x&=(x-1))
rez+=aib[x];
return rez;
}
void update(int x, int y){
for(; x<=n; x+=x&(-x))
aib[x]+=y;
}
int main(){
ifstream cin("aib.in");
ofstream cout("aib.out");
int a, i, q, b, tip, st, dr, mij;
cin>>n>>q;
for(i=1; i<=n; i++){
cin>>a;
update(i, a);
printf("!");
}
for(i=0; i<q; i++){
cin>>tip>>a;
if(tip<2){
cin>>b;
if(tip==0)
update(a, b);
else
cout<<query(b)-query(a-1)<<"\n";
}else{
st=0;
dr=n;
while(dr-st>1){
mij=(st+dr)/2;
if(query(mij)<a)
st=mij;
else
dr=mij;
}
if(query(dr)==a)
cout<<dr<<"\n";
else
cout<<"-1\n";
}
}
}