#include <vector>
class Solution {
public:
    //利用归并排序
    long long ans;
    vector<int> a;
    vector<int>t;
    void merge(int l,int r,int mid){
        int i=l,j=mid,p=l;
        cout<<l<<r<<" ";
        while(i<mid&&j<=r){
            if(a[i]<=a[j]) t[p++]=a[i++];
            else {
                t[p++]=a[j++];
                ans+=(mid-i);//只在归并排序上额外加上这一句
            }
        }
        while(i<mid) t[p++]=a[i++];
        while(j<=r) t[p++]=a[j++];
        p=l;
        while(p!=r+1){
            a[p]=t[p];
            p++;
        }
    }
    void mergeSort(int l,int r){
        if(l<r)
        {
            int mid=(l+r)/2;
            mergeSort(l, mid);
            mergeSort(mid+1, r);
            merge(l,r,mid+1);
        }
    }
    int InversePairs(vector<int> data) {
        this->ans=0;
        this->a=data;
        this->t=data;
        mergeSort(0,data.size()-1);
        return ans%1000000007;
    }
};