Pagini recente » Cod sursa (job #1697683) | Cod sursa (job #1017282) | Cod sursa (job #2579758) | Cod sursa (job #2320848) | Cod sursa (job #2229812)
#include <iostream>
#include <fstream>
#define cin in
#define cout out
using namespace std;
int n, tree[100005] = {0};
void add(int k, int x) {
while (k <= n){
tree[k] += x;
k += k & -k;
}
}
int sum(int k) {
int s = 0;
while (k >= 1) {
s += tree[k];
k -= k & -k;
}
return s;
}
int query(int a, int b) {
return sum(b) - sum(a - 1);
}
int srch(int a){
int l = 1, r = n;
while (l <= r){
int k = (l + r) / 2;
int s = sum(k);
if (s == a)
return k;
if (s < a)
l = k + 1;
else
r = k - 1;
}
return -1;
}
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
ifstream in("aib.in");
ofstream out("aib.out");
int m, i, x, op, k, a, b;
cin >> n >> m;
for (i = 1; i <= n; ++i) {
cin >> x;
add(i, x);
}
for (i = 1; i <= m; ++i) {
cin >> op;
if (op == 0) {
cin >> k >> x;
add(k, x);
}
else {
if (op == 1) {
cin >> a >> b;
cout << query(a, b) << '\n';
}
else {
cin >> a;
cout << srch(a) << '\n';
}
}
}
}