Pagini recente » Cod sursa (job #357861) | Cod sursa (job #1845788) | Cod sursa (job #2500391) | Cod sursa (job #3198930) | Cod sursa (job #3234051)
#include <fstream>
#include <iostream>
using namespace std;
ifstream in("aib.in");
ofstream out("aib.out");
const int lim = 1e5 + 4;
int aib[lim];
int n, m;
int t, x, y, z;
void update(int k, int a) {
for (; k <= n; k += k & -k) {
aib[k] += a;
}
}
int query(int k) {
int sum = 0;
for (; k > 0; k -= k & -k) {
sum += aib[k];
}
return sum;
}
int main() {
in >> n >> m;
for (int i = 1; i <= n; ++i) {
in >> x;
update(i, x);
}
while (m--) {
in >> t;
if (t == 0) {
in >> x >> y;
update(x, y);
} else if (t == 1) {
in >> x >> y;
out << query(y) - query(x - 1) << '\n';
} else {
in >> x;
int l = 1, r = n, med;
while (l < r) {
med = (l + r) >> 1;
if (query(med) < x) {
l = med + 1;
} else {
r = med;
}
}
if (query(l) == x) {
out << l << '\n';
} else {
out << -1 << '\n';
}
}
}
return 0;
}