Poj 2299
来源:互联网 发布:mysql replace函数 编辑:程序博客网 时间:2024/05/22 02:16
求逆序数,合并排序的简单应用,经验不足,把简单问题复杂化,把堆排序整出来了,各种RE,不知道为啥,百度一下,写了合并排序过了
~
实践证明,Scanner慢的很,用BufferedReader从 2750ms降到688ms.
package june;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Poj2299 {
public static void main(String[] args) throws NumberFormatException,
IOException {
BufferedReader s = new BufferedReader(new InputStreamReader(System.in));
int length;
int[] in;
StringBuilder sb = new StringBuilder();
while (true) {
length = new Integer(s.readLine());
if (length == 0)
break;
in = new int[length];
for (int i = 0; i < length; i++)
in[i] = new Integer(s.readLine());
mergeSort(in, 0, length - 1);
sb.append(total);
sb.append('/n');
total = 0;
}
System.out.println(sb.toString());
}
public static void mergeSort(int[] in, int start, int end) {
int mid;
if (start < end) {
mid = (start + end) / 2;
mergeSort(in, start, mid);
mergeSort(in, mid + 1, end);
merge(in, start, mid, end);
}
}
static long total = 0;
public static void merge(int[] in, int start, int mid, int end) {
int s1 = start;
int s2 = mid + 1;
int e1 = mid;
int e2 = end;
int tmp[] = new int[end - start + 1];
int i = 0;
while (s1 <= e1 && s2 <= e2) {
if (in[s1] <= in[s2])
tmp[i++] = in[s1++];
else {
tmp[i++] = in[s2++];
total = total + e1 - s1 + 1;
}
}
while (s1 <= e1)
tmp[i++] = in[s1++];
while (s2 <= e2)
tmp[i++] = in[s2++];
for (i = start; i <= end; i++)
in[i] = tmp[i - start];
}
}
- POJ-2299-POJ 2299
- POJ 2299
- Poj 2299
- POJ 2299
- poj 2299
- poj 2299
- poj 2299
- poj.2299
- POJ 2299
- poj 2299
- poj-2299
- poj 2299
- poj-2299
- poj 2299
- POJ 2299
- poj 2299
- Poj 2299
- POJ 2299
- QT start
- VMware中网络设置
- symbian流媒体入门之--《3GP文件格式分析》
- 预测C#与.NET发展趋势 (转载)
- 创建优化的SQL语句
- Poj 2299
- Oracle优化器和索引原理
- SQL中的锁---转贴自fredrickhu
- spring,struts,hibernate三大框架编程原理
- oracle内置程序包
- 预测C#与.NET发展趋势()
- C++中字符串处理函数的方法
- Windows Embedded Compact 7-ipad与android的致命杀手,windows phone7 的真正基石
- oracle触发器