Pagini recente » Borderou de evaluare (job #395782) | Cod sursa (job #2107890)
#include <bits/stdc++.h>
using namespace std;
const int dim = 100005;
int bit[dim], N;
int lsb(int x) {
return x&-x;
}
void update(int pos, int val) {
for(; pos <= N; pos += lsb(pos))
bit[pos]+=val;
}
long long query(int pos) {
long long res = 0;
for(; pos; pos -= lsb(pos))
res += bit[pos];
return res;
}
void solve() {
int M;
cin >> N >> M;
for (int i = 1; i <= N; ++i) {
int x;
cin >> x;
update(i, x);
}
for (; M; --M) {
int op;
cin >> op;
if (op == 0) {
int pos, val;
cin >> pos >> val;
update(pos, -val);
}
else {
int left, right;
cin >> left >> right;
cout << query(right) - query(left - 1) << '\n';
}
}
}
int main() {
assert(freopen("datorii.in", "r", stdin));
assert(freopen("datorii.out", "w", stdout));
solve();
return 0;
}