Pagini recente » Cod sursa (job #1725732) | Cod sursa (job #3243590) | Cod sursa (job #1238834) | Cod sursa (job #1640471) | Cod sursa (job #1185553)
#include<fstream>
using namespace std;
ifstream fi("aib.in");
ofstream fo("aib.out");
const int maxn = 100005;
int i,n,m,x,y,oper;
int a[maxn];
int lsb(int x){
return (x&(-x));
}
void update(int poz,int x){
int i;
for(i=poz;i<=n;i+=lsb(i))
a[i]+=x;
}
int query(int poz){
int i,s=0;
for(i=poz;i>0;i-=lsb(i))
s+=a[i];
return s;
}
int caut_binar(int x){
int i,step;
for(step=1; step<n; step<<=1);
for(i=0; step>0; step>>=1)
if(i+step<=n){
if(x>=a[i+step]){
i+=step; x-=a[i];
if(!x) return i;
}
}
return (-1);
}
int main(){
fi>>n>>m;
for(i=1;i<=n;i++){ fi>>x; update(i,x); }
for(;m>0;m--){
fi>>oper;
if(oper==0){
fi>>x>>y;
update(x,y);
}
else if(oper==1){
fi>>x>>y;
fo<<query(y)-query(x-1)<<"\n";
}
else if(oper==2){
fi>>x;
fo<<caut_binar(x)<<"\n";
}
}
fi.close();
fo.close();
return 0;
}