Pagini recente » Cod sursa (job #1168943) | Cod sursa (job #2016316) | Cod sursa (job #2155189) | Cod sursa (job #2106514) | Cod sursa (job #3004920)
#include <fstream>
using namespace std;
ifstream f("aib.in");
ofstream g("aib.out");
int v[100001],n;
int tree[100001];
int ask(int poz){
int rez=0;
while(poz){
rez+=tree[poz];
poz-=poz&(-poz);
}
return rez;
}
void add(int poz,int val){
while(poz<=n){
tree[poz]+=val;
poz+=poz&(-poz);
}
}
int query(int L,int R){
if(L>R)
return 0;
else
return ask(R)-ask(L-1);
}
int main(){
int m;
f>>n>>m;
for(int i=1;i<=n;++i){
f>>v[i];
add(i,v[i]);
}
int cer,a,b;
while(m--){
f>>cer>>a;
if(cer==0){
f>>b;
v[a]+=b;
add(a,b);
}
if(cer==1){
f>>b;
g<<query(a,b)<<'\n';
}
if(cer==2){
if(ask(1)==a)
g<<1<<'\n';
else{
bool ok=true;
int k=2,r=0;
do{
r=ask(k);
if(r==a)
ok=false;
k++;
}while(ok&&r<=a);
if(ok)
g<<-1<<'\n';
else
g<<k-1<<'\n';
}
}
}
return 0;
}