public class Solution {
int p;
public int InversePairs(int [] array) {
p=0;
if(array!=null){
mergesort(array,0,array.length-1);
}
return p;
}
public void mergesort(int[] arr,int l,int r){
if(l>=r) return;
int mid=(l+r)/2;
mergesort(arr,l,mid);
mergesort(arr,mid+1,r);
merge(arr,l,mid,r);
}
public void merge(int[] arr,int l,int mid,int r){
int[] help=new int[r-l+1];
int p1=l,p2=mid+1;
int i=0;
while(p1<=mid&&p2<=r){
if(arr[p1]<=arr[p2]){
help[i++]=arr[p1++];
}else{
help[i++]=arr[p2++];
p+=mid-p1+1;
//后面数组的数字跳过了前面数组剩余的数字,剩余多少个就是多少的逆序对
p%=1000000007;
}
}
while(p1<=mid){
help[i++]=arr[p1++];
}
while(p2<=r){
help[i++]=arr[p2++];
}
for(int j=0;j<help.length;j++){
arr[l+j]=help[j];
}
}
}