Pagini recente » Cod sursa (job #1769173) | Cod sursa (job #2348062) | Cod sursa (job #116269) | Cod sursa (job #2791969) | Cod sursa (job #2771207)
#include <bits/stdc++.h>
using namespace std;
const int mxN = 1e5 + 5;
ifstream fin("aib.in");
ofstream fout("aib.out");
int N, M, aib[mxN];
void update(int pos, int value) {
for (int i = pos; i <= N; i += ((i) & (-i))) {
aib[i] += value;
}
}
int query(int pos) {
int sum = 0;
for (int i = pos; i > 0; i -= (i & -i)) {
sum += aib[i];
}
return sum;
}
void Search(int req_sum, int left, int right) {
if (left == right) {
if (query(left) == req_sum) {
fout << left << '\n';
return;
}
fout << -1 << '\n';
return;
}
int mij = (left + right) / 2;
if (query(mij) >= req_sum) {
Search(req_sum, left, mij);
} else {
Search(req_sum, mij + 1, right);
}
}
int main() {
ios::sync_with_stdio(false), fin.tie(nullptr);
fin >> N >> M;
for (int i = 1; i <= N; ++i) {
int x; fin >> x;
update(i, x);
}
while (M--) {
int cerinta; fin >> cerinta;
if (cerinta == 0) {
int a, b; fin >> a >> b;
update(a, b);
} else if (cerinta == 1) {
int a, b; fin >> a >> b;
fout << query(b) - query(a - 1) << '\n';
} else {
int a; fin >> a;
Search(a, 1, N);
}
}
return 0;
}