Pagini recente » Cod sursa (job #2208722) | Cod sursa (job #1397657) | Cod sursa (job #3225606) | Cod sursa (job #2841311) | Cod sursa (job #1100997)
#include<iostream>
#include<fstream>
using namespace std;
ifstream fin("aib.in");
ofstream fout("aib.out");
int arb[100001], n, m, i, c, a, b;
void update(int idx, int val) {
while(idx <= n) {
arb[idx] += val;
idx += (idx & -idx);
}
}
int read(int idx) {
int sol = 0;
while(idx > 0) {
sol += arb[idx];
idx -= (idx & -idx);
}
return sol;
}
int look(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() {
fin >> n >> m;
for(i = 1; i <= n; i++) {
fin >> a;
update(i, a);
}
for(i = 1; i <= m; i++) {
fin >> c;
if(c == 0) {
fin >> a >> b;
update(a, b);
}
if(c == 1) {
fin >> a >> b;
fout << read(b) - read(a - 1) << '\n';
}
if(c == 2) {
fin >> a;
fout << look(a) << '\n';
}
}
fin.close();
fout.close();
return 0;
}