同leetcode剑指 Offer 51. 数组中的逆序对
谢谢y老师 学到了 哈哈哈爱了
java:
import java.util.*;
public class Main{
private static int N = 100010;
private static int[] q = new int[N];
private static int[] tmp = new int[N];
public static void main(String[] args){
Scanner scan = new Scanner(System.in);
int n = scan.nextInt();
for(int i = 0; i < n; i++){
q[i] = scan.nextInt();
}
int l = 0, r = n - 1;
System.out.println(merge_sort(q, l, r));
}
public static long merge_sort(int[] q, int l, int r){
if(l >= r) return 0;
int mid = l + r >> 1;
long res = merge_sort(q, l, mid) + merge_sort(q, mid + 1, r);
int i = l, j = mid + 1, id = 0;
while(i <= mid && j <= r){
if(q[i] <= q[j]) tmp[id ++] = q[i ++];
else{
tmp[id ++] = q[j ++];
res += mid - i + 1;
}
}
while(i <= mid) tmp[id ++] = q[i ++];
while(j <= r) tmp[id ++] = q[j ++];
for(i = l, id = 0; i <= r; i ++, id ++) q[i] = tmp[id];
return res;
}
}