Advertisement
nikunjsoni

493

May 23rd, 2021
116
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.97 KB | None | 0 0
  1. class Solution {
  2. private:
  3.     int getSum(int *bit, int idx){
  4.         int sum = 0;
  5.         while(idx > 0){
  6.             sum += bit[idx];
  7.             idx -= (idx&-idx);
  8.         }
  9.         return sum;
  10.     }
  11.    
  12.     void update(int *bit, int n, int idx, int val){
  13.         while(idx <= n){
  14.             bit[idx] += val;
  15.             idx += (idx & -idx);
  16.         }
  17.     }
  18.    
  19. public:
  20.     int reversePairs(vector<int>& nums) {
  21.         if (!nums.size()) return 0;
  22.         int n = nums.size(), inversions = 0;
  23.         int temp[n];
  24.         for(int i=0; i<n; i++)
  25.             temp[i] = nums[i];
  26.        
  27.         sort(temp, temp+n);
  28.         int bit[50004] = {0};
  29.        
  30.         for(int i=0; i<n; i++){
  31.             int index = upper_bound(temp, temp+n, 2L * nums[i]) - temp;
  32.             inversions += i - getSum(bit, index);
  33.             index = upper_bound(temp, temp+n, nums[i]) - temp;
  34.             update(bit, n, index, 1);
  35.         }
  36.         return inversions;
  37.     }
  38. };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement