Advertisement
CyberN00b

Fenwik Tree

Nov 7th, 2020
337
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.05 KB | None | 0 0
  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. void update(int index, int delta, vector<int>& vc) {
  4.     while (index < vc.size()) {
  5.         vc[index] += delta;
  6.         index = index | (index + 1);
  7.     }
  8. }
  9. int sum(int index, vector<int>& vc) {
  10.     int s = 0;
  11.     while (index >= 0) {
  12.         s += vc[index];
  13.         index = (index & (index + 1)) - 1;
  14.     }
  15.     return s;
  16. }
  17. int sum(int l, int r, vector<int>& vc) {
  18.     return sum(r, vc) - sum(l - 1, vc);
  19. }
  20. int main() {
  21.     int n;
  22.     cin >> n; // size of vector
  23.     vector<int> vc(n, 0);
  24.     int tmp;
  25.     for (int i = 0; i < n; ++i) { // first setup of vector
  26.         cin >> tmp;
  27.         update(i, tmp, vc);
  28.     }
  29.     int c; //count of requests
  30.     cin >> c;
  31.     string stmp;
  32.     int l, r, in, d;
  33.     for (int i = 0; i < c; ++i) {
  34.         cin >> stmp;
  35.         if (stmp == "ADD") {
  36.             cin >> in >> d;
  37.             update(in - 1, d, vc);
  38.         } else if (stmp == "SUM") {
  39.             cin >> l >> r; // l <= r
  40.             cout << sum(l - 1, r - 1, vc) << '\n';
  41.         }
  42.     }
  43. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement