matbensch

Fenwick Tree Wikipedia

Feb 16th, 2023
953
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.65 KB | None | 0 0
  1. // from https://en.wikipedia.org/wiki/Fenwick_tree
  2. class FenwickTree {
  3. private:
  4.     vector<int> data;
  5.  
  6.     int getParent(int i) const {
  7.         return i - (i & (-i));
  8.     }
  9.  
  10.     int getNext(int i) const {
  11.         return i + (i & (-i));
  12.     }
  13.  
  14. public:
  15.     FenwickTree(int n) : data(n+1, 0) {
  16.     }
  17.  
  18.     int getSum(int i) const {
  19.         int sum = 0;
  20.         ++i;
  21.         while (i > 0) {
  22.             sum += data[i];
  23.             i = getParent(i);
  24.         }
  25.         return sum;
  26.     }
  27.  
  28.     void update(int i, int v) {
  29.         ++i;
  30.         while (i < data.size()) {
  31.             data[i] += v;
  32.             i = getNext(i);
  33.         }
  34.     }
  35. };
Advertisement
Add Comment
Please, Sign In to add comment