public class Solution {

    private int res = 0;
    private int[] temp;

    public int InversePairs(int [] array) {
        if(array.length == 0 || array.length == 1){
            return 0;
        }
        temp = new int[array.length];
        mergeSort(array,0,array.length-1);
        return res;
    }

    public void mergeSort(int[] arr,int left,int right){
        if(left >= right){
            return;
        }
        int mid = left + ((right - left) >> 1);
        mergeSort(arr,left,mid);
        mergeSort(arr,mid + 1,right);

        int i = left;
        int j = mid + 1;
        int ids = 0;
        while(i <= mid && j <= right){
            if(arr[i] <= arr[j]){
                temp[ids++] = arr[i++];
            } else {
                res = (res + mid + 1 - i) % 1000000007;
                temp[ids++] = arr[j++];
            }
        }

        while(i <= mid){
            temp[ids++] = arr[i++];
        }
        while(j <= right){
            temp[ids++] = arr[j++];
        }

        // 特别重要,每一次回溯一次,将temp里面临时存放的数组还回到array里面去
        for(int k = 0; k <= right - left; k++) {
            arr[k + left] = temp[k];
        }

    }
}