求逆序数
2015-11-02 22:26
274 查看
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 block e.printStackTrace(); } inversion_count(a, 0, N - 1); System.out.println(count); } }
相关文章推荐
- 乘法逆元
- 机器视觉算法之物体方位特征提取
- 机器视觉算法之物体方位特征提取
- UITextField
- Chapter 2 Exercises & Problems
- LeetCode Permutations (全排列)
- python----脚本文件的头部写法。
- MFC/VC下控制windows服务——停止服务,启动服务
- 逻辑运算符(And、AndAlso、Or、OrElse、&&、&、||、|)
- Xcode终端爆炸之显示TEMPLATE END的解决办法
- hdoj 2028 Lowest Common Multiple Plus【GCD】
- java---表、栈和队列
- UISwitch
- UIButton
- Spring Cache
- Java多线程中的join()方法
- 三极管的三种工作状态究竟该怎么理解?
- 关于B树,B+树
- C#委托 Delegate
- UISegmentedControl