c++
class Solution {
public:
int countReversePairs(vector<int>& nums, vector<int>& arr, int l, int r) {
if (l >= r) return 0;
int ans = 0, mid = (r + l) >> 1;
ans += countReversePairs(nums, arr, l, mid);
ans += countReversePairs(nums, arr, mid + 1, r);
int k = l, p1 = l, p2 = mid + 1;
while (p1 <= mid || p2 <= r) {
if (p2 > r || (p1 <= mid && nums[p1] <= nums[p2])) {
arr[k++] = nums[p1++];
} else {
arr[k++] = nums[p2++];
ans += (mid - p1 + 1);
}
}
for (int i = l; i <= r; i++) nums[i] = arr[i];
return ans;
}
int reversePairs(vector<int>& nums) {
vector<int> arr(nums.size(), 0);
return countReversePairs(nums, arr, 0, nums.size() - 1);
}
};
js
var countReversePairs = function(nums, temp, l, r) {
if (l >= r) return 0;
var ans = 0, mid = (l + r) >> 1;
ans += countReversePairs(nums, temp, l, mid);
ans += countReversePairs(nums, temp, mid + 1, r);
var k = l, p1 = l, p2 = mid + 1;
while (p1 <= mid || p2 <= r) {
if (p2 > r || (p1 <= mid && nums[p1] <= nums[p2])) {
temp[k++] = nums[p1++];
} else {
temp[k++] = nums[p2++];
ans += (mid - p1 + 1);
}
}
for (var i = l; i <= r; i++) nums[i] = temp[i];
return ans;
}
var reversePairs = function(nums) {
var temp = new Array(nums.length).fill(0);
return countReversePairs(nums, temp, 0, nums.length - 1);
};