Pagini recente » Cod sursa (job #2212363) | Cod sursa (job #3199481) | Cod sursa (job #1200523) | Cod sursa (job #2941275) | Cod sursa (job #2187147)
#include <bits/stdc++.h>
using namespace std;
int n, m;
int S, C;
int k;
int q1, q2;
int arb[ 100010 ];
void update(int poz, int val){
C = 0;
while ( poz <= n ){
arb[ poz ] += val;
while (!(poz & (1 << C)))
++C;
poz += (1 << C);
C += 1;
}
}
inline int Query(int poz){
C = 0, S = 0;
while ( poz > 0 ){
S += arb[ poz ];
while ( !(poz & (1<<C)) )
++C;
poz -= (1<<C);
C += 1;
}
return S;
}
int Search(int val)
{
int i, step;
for ( step = 1; step < n; step <<= 1 );
for( i = 0; step; step >>= 1 ){
if( i + step <= n){
if( val >= arb[ i + step ] ){
i += step, val -= arb[ i ];
if ( !val ) return i;
}
}
}
return -1;
}
int main(){
ios_base::sync_with_stdio(false);
ifstream cin("aib.in");
ofstream cout("aib.out");
cin >> n >> m;
for (int i = 1, x; i <= n; ++i){
cin >> x;
update( i, x );
}
for (; m; m--){
cin >> k;
if (k < 2){
cin >> q1 >> q2;
if (!k)
update(q1, q2);
else
cout << Query(q2) - Query(q1 - 1) << '\n';
}
else{
cin >> q1;
cout << Search( q1 ) << '\n';
}
}
}