AcWing 788. 逆序对的数量
原题链接
简单
作者:
nomain.
,
2025-04-14 23:51:10
· 山东
,
所有人可见
,
阅读 1
import java.util.*;
import java.io.*;
public class Main{
public static int N = 100010;
public static int n;
public static int a[] = new int[N];
public static long mergeSort(int[] arr,int left,int right){
if(left >= right) return 0;
int mid = (left + right) / 2 ;
long result = mergeSort(arr,left,mid) + mergeSort(arr,mid + 1,right);
int[] temp = new int[right - left + 1];
int k = 0,i = left,j = mid + 1;
while(i <= mid && j <= right){
if(arr[i] <= arr[j]) temp[k ++ ] = arr[i ++ ];
else{
temp[k ++ ] = arr[j ++ ];
result += mid - i + 1;
}
}
while(i <= mid) temp[k ++ ] = arr[i ++ ];
while(j <= right) temp[k ++ ] = arr[j ++ ];
for(i = left,j = 0;i <= right;i++,j++){
arr[i] = temp[j];
}
return result;
}
public static void main(String[] args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
String str = br.readLine();
n = Integer.parseInt(str);
String[] s = br.readLine().split(" ");
for(int i = 0;i < n;i ++) a[i] = Integer.parseInt(s[i]);
long resault = mergeSort(a,0,n-1);
bw.write(String.valueOf(resault));
bw.close();
}
}