#include <vector>
class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param nums int整型vector 
     * @return int整型
     */
    int res = 0, tem[100010] = {};
    void mrege_sort(vector<int>& nums, int l, int r) 
    {
        if(l == r) return;
        int mid = l + r >> 1;
        mrege_sort(nums, l, mid), mrege_sort(nums, mid + 1, r);

        int k = 0, i = l, j = mid + 1;
        while(i <= mid && j <= r) 
        {
            if(nums[i] <= nums[j]) tem[k ++] = nums[i ++];
            else 
            {
                res += mid - i + 1;
                res = res % 1000000007;
                tem[k ++] = nums[j ++];
            }
        }
        while(i <= mid) tem[k ++] = nums[i ++];
        while(j <= r) tem[k ++] = nums[j ++];

        for(int i = l, k = 0; i <= r; i ++) nums[i] = tem[k ++];
    }

    int InversePairs(vector<int>& nums) {
        mrege_sort(nums, 0, nums.size() - 1);
        return res;
    }
};