Pagini recente » Rezultatele filtrării | Diferente pentru utilizator/vladstoick intre reviziile 48 si 49 | Cod sursa (job #2107853)
#include <bits/stdc++.h>
using namespace std;
class BIT {
public:
BIT(const vector< int >& v) {
size = v.size();
data.resize(v.size() + 1);
for (size_t i = 0; i < size; ++i)
update((int)i + 1, v[i]);
}
void update(int pos, int val) {
for (; pos <= size; pos += lsb(pos))
data[pos] += val;
}
int query(int left, int right) {
return query_single(right) - query_single(left - 1);
}
private:
int lsb(int x) {
return (x&(-x));
}
int query_single(int pos) {
int res = 0;
for (; pos; pos -= lsb(pos))
res += data[pos];
return res;
}
size_t size;
vector< int > data;
};
void solve() {
int N, M;
cin >> N >> M;
vector< int > v(N);
for (auto& it : v)
cin >> it;
BIT bit(v);
for (; M; --M) {
int op;
cin >> op;
if (op == 0) {
int pos, val;
cin >> pos >> val;
bit.update(pos, -val);
}
else {
int left, right;
cin >> left >> right;
cout << bit.query(left, right) << '\n';
}
}
}
int main() {
assert(freopen("datorii.in", "r", stdin));
assert(freopen("datorii.out", "w", stdout));
solve();
return 0;
}