Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <vector>
- #include <cmath>
- #include<iostream>
- using namespace std;
- class Fenwick {
- private:
- int64_t n_;
- vector<int64_t> t;
- public:
- explicit Fenwick(int64_t n) : n_(n) {
- t.assign(n_, 0);
- }
- explicit Fenwick(const vector<int64_t> &arr) : n_(arr.size()) {
- t.assign(n_, 0);
- for (size_t i = 0; i < arr.size(); i++) {
- inc(i, arr[i]);
- }
- }
- void inc(int64_t i, int64_t delta) {
- for (; i < n_; i = (i | (i + 1))) {
- t[i] += delta;
- }
- }
- int64_t sum(int64_t r) {
- int64_t result = 0;
- for (; r >= 0; r = (r & (r + 1)) - 1) {
- result += t[r];
- }
- return result;
- }
- int64_t sum(int64_t l, int64_t r) {
- return sum(r) - sum(l - 1);
- }
- };
- int main() {
- int64_t N;
- cin >> N;
- vector<int64_t> arr;
- int64_t value;
- for (int i = 0; i < N; ++i) {
- cin >> value;
- arr.push_back(value);
- }
- Fenwick fenw(arr);
- int64_t Q;
- cin >> Q;
- int64_t sum_ = 0;
- for (int64_t i = 0; i < Q; ++i) {
- int64_t T_i;
- cin >> T_i;
- if (T_i == 1) {
- int64_t L_i, R_i;
- cin >> L_i >> R_i;
- sum_ = fenw.sum(L_i, R_i);
- cout << sum_ << '\n';
- } else {
- int64_t I_i, X_i;
- cin >> I_i >> X_i;
- fenw.inc(I_i, X_i - arr[I_i]);
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement