Pagini recente » Cod sursa (job #3192661) | Cod sursa (job #890646) | Cod sursa (job #355172) | Cod sursa (job #2860224) | Cod sursa (job #2737530)
#include <bits/stdc++.h>
using namespace std;
#define debug(x) cerr << #x << " = " << x << "\n";
ifstream in("aib.in");
ofstream out("aib.out");
const int lg = 17;
const int max_n = (int)1e5 + 5;
int n, m;
int bit[max_n];
int lsb(int x) {
return x & (-x);
}
void add(int pos, int val) {
while (pos <= n) {
bit[pos] += val;
pos += lsb(pos);
}
}
int query(int pos) {
int ans = 0;
while (pos > 0) {
ans += bit[pos];
pos -= lsb(pos);
}
return ans;
}
int lift(int value) {
int ans = 0;
for (int step = (1 << lg); step > 0; step >>= 1) {
if (ans + step <= n && value >= bit[ans + step]) {
ans += step;
value -= bit[ans];
}
}
if (!value) {
return ans;
}
return -1;
}
int main() {
in >> n >> m;
for (int i = 1; i <= n; i++) {
int val;
in >> val;
add(i, val);
}
for (int i = 1; i <= m; i++) {
int op, x, y;
in >> op >> x;
if (op == 0) {
in >> y;
add(x, y);
} else if (op == 1) {
in >> y;
out << query(y) - query(x - 1) << "\n";
} else {
out << lift(x) << "\n";
}
}
return 0;
}