public class Solution {
public int merge(int[]array,int left,int mid,int right){
if(left>=right)
return 0;
int[] temp=new int[right-left+1];//分配一个临时数组
int l=left,r=mid+1,t=0;
int ans=0;
while(l>=mid&&r<=right){//结束标志
if(array[l]<=array[r])
temp[t++]=array[l++];//左边部分向右移动
else{
temp[t++]=array[r++];
ans+=(mid+1-l)%1000000007;
}
}
while(l<=mid) temp[t++]=array[l++];
while(r<=right) temp[t++]=array[r++];
for(int i=0;i+left<=right;++i){
array[i+left]=temp[i];
}
return ans;
}
public int mergeSort(int[] array,int left,int right)
{
if(left>=right)
return 0;//停止划分
int mid=(left+right)/2;
int ans=mergeSort(array,left,mid);
ans+=mergeSort(array,mid+1,right);
ans+=merge(array,left,mid,right);
return ans;
}
public int InversePairs(int [] array) {
return mergeSort(array,0,array.length-1);
}
}