Pagini recente » Cod sursa (job #1149059) | Cod sursa (job #3345628) | Cod sursa (job #1696772) | Cod sursa (job #1253602) | Cod sursa (job #3326980)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("aib.in");
ofstream fout("aib.out");
int v[100001],aib[100001],n,m;
void update(int poz, int val){
for(int i = poz; i<=n; i+=(i&-i))
aib[i]+=val;
}
int query(int poz){
int suma = 0;
for(int i = poz; i>=1; i-=(i&-i))
suma+=aib[i];
return suma;
}
void cb(int val){
int st = 1, dr = n;
int poz = -1;
while(st<=dr){
//cout<<'\n';
int mij = (st+dr)/2;
int suma = query(mij);
if(suma<=val)
st = mij+1;
else
dr = mij-1;
if(suma == val)
poz = mij;
}
fout<<poz<<'\n';
}
int main(){
// aib[i] = suma partiala[i]
fin>>n>>m;
for(int i = 1; i<=n ;i++){
fin>>v[i];
update(i,v[i]);
}
while(m--){
//for(int i = 1; i<=n; i++){
// cout<<query(i)<<" ";
// }
int op ;
fin>>op;
if(op==0){
int a,b;
fin>>a>>b;
update(a,b);
} else if(op == 1){
int a,b; fin>>a>>b;
fout<<query(b)-query(a-1)<<'\n';
} else{
int a; fin>>a;
cb(a);
}
}
return 0;
}