Pagini recente » Cod sursa (job #1065913) | Cod sursa (job #3205400) | Cod sursa (job #1452906) | Cod sursa (job #2222165) | Cod sursa (job #2049152)
#include<fstream>
using namespace std;
ifstream fin("aib.in");
ofstream fout("aib.out");
const int NMAX=100005;
int aib[NMAX],n,m;
int zeros(int x){
return x&(x^(x-1));
}
void update(int pos,int val){
int i;
for(i=pos;i<=n;i+=zeros(i))
aib[i]+=val;
}
int query(int pos){
int sum=0,i;
for(i=pos;i>0;i-=zeros(i))
sum+=aib[i];
return sum;
}
int bin_search(int val){
int i,step;
for(step=1;step<n;step<<=2);
for(i=0;step;step>>=1)
if(i+step<=n&&aib[i+step]<=val){
i+=step;
val-=aib[i];
if(val==0)
return i;
}
return -1;
}
void read_data(){
int i,x;
fin>>n>>m;
for(i=1;i<=n;++i){
fin>>x;
update(i,x);
}
}
void solve(){
int code,a,b;
while(m--){
fin>>code;
if(code!=2){
fin>>a>>b;
if(code==0)
update(a,b);
else
fout<<query(b)-query(a-1)<<'\n';
}
else{
fin>>a;
fout<<bin_search(a)<<'\n';
}
}
}
int main(){
read_data();
solve();
}