nikunjsoni

307

May 25th, 2021
130
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.00 KB | None | 0 0
  1. class NumArray {
  2. public:
  3.     vector<int> bit;
  4.     int n;
  5.     NumArray(vector<int>& nums) {
  6.         n = nums.size();
  7.         bit.resize(n+1, 0);
  8.         for(int i=0; i<nums.size(); i++)
  9.             update(i, nums[i]);
  10.     }
  11.    
  12.     void update(int index, int val) {
  13.         index++;
  14.         int oldVal = sumRange(index-1, index-1);
  15.         val = val-oldVal;
  16.         while(index<=n){
  17.             bit[index] += val;
  18.             index += (index & -index);
  19.         }
  20.     }
  21.    
  22.     int sumRange(int left, int right) {
  23.         int sum = 0;
  24.         right++;
  25.         while(right > 0){
  26.             sum += bit[right];
  27.             right -= (right & -right);
  28.         }
  29.        
  30.         while(left > 0){
  31.             sum -= bit[left];
  32.             left -= (left & -left);
  33.         }
  34.         return sum;
  35.     }
  36. };
  37.  
  38. /**
  39.  * Your NumArray object will be instantiated and called as such:
  40.  * NumArray* obj = new NumArray(nums);
  41.  * obj->update(index,val);
  42.  * int param_2 = obj->sumRange(left,right);
  43.  */
Advertisement
Add Comment
Please, Sign In to add comment