求逆序数

来源:互联网 发布:名片设计软件手机版 编辑:程序博客网 时间:2024/06/03 14:31
package hello;import java.io.BufferedReader;import java.io.FileNotFoundException;import java.io.FileReader;import java.io.FileWriter;import java.io.IOException;import javax.imageio.plugins.bmp.BMPImageWriteParam;import javax.xml.crypto.Data;public class Hello {static int[] a = new int[100000];static int N = 100000;static long count = 0;public static void merge_Count(int a[], int m, int l, int r) {int L[] = new int[l - m + 1];int R[] = new int[r - l];int p = 0;int q = 0;for (int i = m; i <= l; i++)L[p++] = a[i];for (int i = l + 1; i <= r; i++) {R[q++] = a[i];}int i = 0, j = 0;for (int k = m; k <= r; k++) {if (i <= l - m & j <= r - l - 1) {if (L[i] < R[j]) {a[k] = L[i];i++;} else {a[k] = R[j];j++;count = count + l - m -i+ 1;}} else if (i > l - m) {a[k] = R[j++];} else {a[k] = L[i++];}}}public static void inversion_count(int a[], int l, int r) {if (l < r) {int m = (l + r) / 2;inversion_count(a, l, m);inversion_count(a, m + 1, r);merge_Count(a, l, m, r);} else {return;}}public static void main(String[] args) {try {FileReader fr = new FileReader("Q2.txt");BufferedReader br = new BufferedReader(fr);int i = 0;String line;while ((line = br.readLine()) != null) {a[i++] = Integer.parseInt(line);}} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}inversion_count(a, 0, N - 1);System.out.println(count);}}

0 0
原创粉丝点击