function InversePairs(data) {
// write code here
let mod = 1000000007;
let temp = [];
function mergeNode(l, r) {
// 停止划分
if (l >= r) return 0;
// 取中位数下标
let mid = parseInt((l + r) / 2);
let ans = mergeNode(l, mid) + mergeNode(mid + 1, r);
ans %= mod;
// 保存原数组数据
for (let i = l; i <= r; ++i) {
temp[i] = data[i];
}
let left = l,
right = mid + 1;
for (let i = l; i <= r; ++i) {
if (left == mid + 1) {
// 左指针到头,则赋值右边
data[i] = temp[right++];
} else if (right == r + 1 || temp[left] <= temp[right]) {
// 右指针到头或左小于等于右,则赋值左边
data[i] = temp[left++];
} else {
// 右边大于左边,则赋值右边并统计逆序对
data[i] = temp[right++];
ans = ans + mid - left + 1;
}
}
// 答案取模
return ans % mod;
}
let len = data.length;
let ans = mergeNode(0, len - 1);
// console.log("index:", index);
return ans;
}
module.exports = {
InversePairs: InversePairs,
};