Pagini recente » Cod sursa (job #2492373) | Cod sursa (job #2344208) | Cod sursa (job #2430861) | Cod sursa (job #1396369) | Cod sursa (job #3228630)
#include <bits/stdc++.h>
using namespace std;
ifstream fin ("aib.in");
ofstream fout ("aib.out");
const int NM = 1e5 + 5;
int aib[4 * NM];
int n, m;
void update (int poz, int x) {
for (int i = poz; i <= n; i += i & (-i)) {
aib[i] += x;
}
}
int query (int x) {
int s = 0;
for (int i = x; i > 0; i -= (i & -i)) {
s += aib[i];
}
return s;
}
int main() {
fin >> n >> m;
for (int i = 1; i <= n; i++) {
int x; fin >> x;
update(i, x);
}
while (m--) {
int o; fin >> o;
int x, y;
if (o == 0) {
int x, y; fin >> x >> y;
update(x, y);
} else if (o == 1) {
fin >> x >> y;
fout << query(y) - query(x - 1) << '\n';
} else {
fin >> x;
int l = 1, r = n, answer = -1;
while (l <= r) {
int mid = (l + r) >> 1;
if (query(mid) >= x) {
answer = mid;
r = mid - 1;
} else {
l = mid + 1;
}
}
if (query(answer) == x) {
fout << answer << '\n';
} else {
fout << -1 << '\n';
}
}
}
}