/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 *
 * @param nums int整型一维数组
 * @return int整型
 */

function Inverse(nums, left, right) {
    if (left >= right-1) {
        return [0, nums];
    }
    let mid = Math.floor((left + right) / 2);
    let [leftCount, leftList] = Inverse(nums.slice(0, mid),0,mid);
    let [rightCount, rightList] = Inverse(nums.slice(mid),0,nums.length-mid);
    let returnList = [];
    let thisCount = leftCount+rightCount;
    // console.log(thisCount)

    p1 = 0;
    p2 = 0;
    while (p1 < leftList.length || p2 < rightList.length) {
        if (p1 >= leftList.length) {
            returnList.push(...rightList.slice(p2));
            break
        }
        if (p2 >= rightList.length) {
            returnList.push(...leftList.slice(p1));
            break
        }

        if (leftList[p1] > rightList[p2]) {

            thisCount += rightList.length - p2;
            returnList.push(leftList[p1]);
            p1++;
        } else {
            // thisCount += leftList.length - p1;
            returnList.push(rightList[p2]);
            p2++;
        }
    }
    // console.log(returnList)
    return [thisCount,returnList]
}

function InversePairs(nums) {
    // write code here
    const modN = 1000000007;
    let left = 0;
    let right = nums.length;
    let [thisCount,returnList]=Inverse(nums, left, right)
    return thisCount % modN
}
module.exports = {
    InversePairs: InversePairs,
};