1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
| class Solution { public: int reversePairs(vector<int>& nums) { aux = vector<int>(nums.size()); sort(nums, 0, nums.size() - 1); return ret; } private: vector<int> aux; int ret = 0; void sort(vector<int>& nums, int lo, int hi) { if(lo >= hi) return; int mid = lo + (hi - lo) / 2; sort(nums, lo, mid); sort(nums, mid + 1, hi); copy(nums.begin() + lo, nums.begin() + hi + 1, aux.begin() + lo); int i = lo, j = mid + 1; for(int k = lo; k <= hi; ++k) { if(i > mid) nums[k] = aux[j++]; else if(j > hi) nums[k] = aux[i++]; else if(aux[i] <= aux[j]) nums[k] = aux[i++]; else { nums[k] = aux[j++]; ret += mid - i + 1; } } } };
|