Pagini recente » Cod sursa (job #577827) | Cod sursa (job #494583) | Cod sursa (job #1206075) | Cod sursa (job #888466) | Cod sursa (job #2752283)
#include <bits/stdc++.h>
using namespace std;
#ifndef LOCAL
ifstream in("aib.in");
ofstream out("aib.out");
#define cin in
#define cout out
#endif //LOCAL
#define int int64_t
const int NMAX = 1e5 + 7;
int aib[NMAX];
void update(int ind, int val) {
for(; ind < NMAX; ind += ind & (-ind)) {
aib[ind] += val;
}
}
int query(int ind) {
int ret = 0;
for(; ind > 0; ind -= ind & (-ind)) {
ret += aib[ind];
}
return ret;
}
int search(int sum, int n) {
if(sum == 0) return -1;
int step = (1 << 16);
for(int ind = 0; step > 0; step /= 2) {
if(ind + step <= n && sum >= aib[ind + step])
ind += step, sum -= aib[ind];
if(sum == 0) return ind;
}
return -1;
}
int32_t main() {
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
int n, m; cin >> n >> m;
for(int i = 1; i <= n; i++) {
int rd; cin >> rd;
update(i, rd);
}
for(int i = 0; i < m; i++) {
int op; cin >> op;
if(op == 0) {
int a, b; cin >> a >> b;
update(a, b);
}
if(op == 1) {
int a, b; cin >> a >> b;
cout << query(b) - query(a - 1) << '\n';
}
if(op == 2) {
int a; cin >> a;
cout << search(a, n) << '\n';
}
}
}