public class Solution {
long count=0;
public int InversePairs(int [] array) {
int length = array.length;
if(length<=1) return 0;
merge_sort(array, 0, length-1);
return (int)(count%1000000007l);
}
public void merge_sort(int[] array,int left,int right){
if(left<right){
int mid = (left+right)>>1;
merge_sort(array, left, mid);
merge_sort(array, mid+1, right);
merge(array, left, mid, right);
}
}
public void merge(int[] array,int left,int mid,int right){
int i = left,j=mid+1,k=0;
int[] temp = new int[right-left+1];
while(i<=mid&&j<=right){
if(array[i]>array[j]){
count+=mid-i+1;
temp[k++] = array[j++]; //k++是为了保证从0开始,不要和++k混淆
}else{
temp[k++]=array[i++];
}
}
while(i<=mid) temp[k++]=array[i++];
while(j<=right) temp[k++]=array[j++];
for(i=0;i<k;i++) array[left+i]=temp[i];
}
}