Advertisement
Guest User

Untitled

a guest
Mar 25th, 2019
69
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.74 KB | None | 0 0
  1. class FenwickTree
  2. {
  3.     int size;
  4.     vector<int> a;
  5.     vector<long long> t;
  6.    
  7.     long long get(int index) {
  8.         long long result = 0;
  9.         for (; index > 0; index -= index & -index) {
  10.             result += t[index];
  11.         }
  12.        
  13.         return result;
  14.     }
  15.    
  16.     void update(int index, int delta) {
  17.         for (; index < size; index += index & -index) {
  18.             t[index] += delta;
  19.         }
  20.     }
  21.  
  22.     public:
  23.         FenwickTree(vector<int> a)
  24.         : a(a)
  25.         , size(a.size() + 1)
  26.         , t(size, 0)
  27.         {
  28.             for (int i = 0; i < a.size(); ++i) {
  29.                 update(i + 1, a[i]);
  30.             }
  31.         }
  32.        
  33.         void set(int index, int value) {
  34.             int delta = value - a[index];
  35.             a[index] = value;
  36.             update(index + 1, delta);
  37.         }
  38.        
  39.         long long get_segment(int start, int end) {
  40.             return get(end + 1) - get(start);
  41.         }
  42. };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement