Pagini recente » Cod sursa (job #866460) | Cod sursa (job #1732415) | Cod sursa (job #1182103) | Cod sursa (job #2513960) | Cod sursa (job #1041885)
#include<fstream>
#define ll long long
using namespace std;
ifstream in("aib.in");
ofstream out("aib.out");
const ll Nmax = 100002;
ll A[Nmax];
ll N,M;
ll lsb(ll &x){
return ( x & (-x) );
}
ll query(ll x){
ll sum=0;
while(x>0){
sum+=A[x];
x-=lsb(x);
}
return sum;
}
void update(ll x,ll val){
while(x<=N){
A[x]+=val;
x+=lsb(x);
}
}
ll kquery(ll a){
ll ans=0,x=1<<30;
while(x>0){
if( ans+x <= N && A[ans+x] <= a ){
a-=A[ans+x];
ans+=x;
}
x>>=1;
}
if(a==0) return ans;
return -1;
}
int main(){
in>>N>>M;
for(ll i=1;i<=N;i++){
ll x;
in>>x;
update(i,x);
}
for(ll i=1;i<=M;i++){
ll c,a,b;
in>>c;
if(c==0){
in>>a>>b;
update(a,b);
}
if(c==1){
in>>a>>b;
out<<query(b)-query(a-1)<<'\n';
}
if(c==2){
in>>a;
out<<kquery(a)<<'\n';
}
}
return 0;
}