POJ2299Ultra-QuickSort(64位long long)
来源:互联网 发布:ubuntu 用户组权限 编辑:程序博客网 时间:2024/06/16 00:41
Ultra-QuickSort
Time Limit: 7000MS Memory Limit: 65536KTotal Submissions: 31628 Accepted: 11281
Description
In this problem, you have to analyze a particular sorting algorithm. The algorithm processes a sequence of n distinct integers by swapping two adjacent sequence elements until the sequence is sorted in ascending order. For the input sequence
9 1 0 5 4 ,
Ultra-QuickSort produces the output
0 1 4 5 9 .
Your task is to determine how many swap operations Ultra-QuickSort needs to perform in order to sort a given input sequence.
Ultra-QuickSort produces the output
Your task is to determine how many swap operations Ultra-QuickSort needs to perform in order to sort a given input sequence.
Input
The input contains several test cases. Every test case begins with a line that contains a single integer n < 500,000 -- the length of the input sequence. Each of the the following n lines contains a single integer 0 ≤ a[i] ≤ 999,999,999, the i-th input sequence element. Input is terminated by a sequence of length n = 0. This sequence must not be processed.
Output
For every input sequence, your program prints a single line containing an integer number op, the minimum number of swap operations necessary to sort the given input sequence.
Sample Input
59105431230
Sample Output
60
#include <iostream>#include <cstdio>#include <cstring>#include <algorithm>using namespace std;const int maxn = 500010;long long cnt = 0;int a[maxn], t[maxn];void merge_sort(int *A, int x, int y, int* T) {//contain [x,y] if(x==y) return ; // printf("x = %d, y = %d\n", x, y); if(y-x>=1) { int m = (x+y)/2; int p = x, q = m+1, i = x; merge_sort(A, x, m, T); merge_sort(A, m+1, y, T); while(p <= m || q <= y) { if(p<=m && q<=y && A[p]<=A[q]) { T[i++] = A[p++]; } if(p<=m && q<=y && A[p]>A[q]) { cnt = cnt + (m-p+1); // printf("cnt = %d\n", cnt); T[i++] = A[q++]; } while(q>y && p<=m) { T[i++] = A[p++]; } while(p>m && q<=y) { T[i++] = A[q++]; } } for( i = x; i <= y; i++) { A[i] = T[i]; } }}int main(){ int n; while((scanf("%d", &n) != EOF) && n) { for(int i = 0; i < n; i++) { scanf("%d", &a[i]); } merge_sort(a, 0, n-1, t); printf("%lld\n", cnt); cnt = 0; } return 0;}/**********************59 1 0 5 489 1 0 5 4 3 8 7**************/
- POJ2299Ultra-QuickSort(64位long long)
- long long 在64位系统下.
- POJ2299Ultra-QuickSort
- poj2299Ultra-QuickSort(树状数组+离散化)
- poj2299Ultra-QuickSort(归并排序+树状数组)
- C/C++中的64位整数(__int64 and long long)
- C/C++中的64位整数(__int64 and long long)
- C/C++中的64位整数(__int64 and long long)
- C/C++中的64位整数(__int64 and long long)
- C/C++中的64位整数(__int64 and long long)
- 字符串向 unsigned long long 64位转换
- poj2299Ultra-QuickSort【逆序数】
- Long
- java 把64位long,转成2个32位的Int,再回转成long
- int ,long ,long long
- long long,long,int
- int、long、long long
- long long C/C++的64位整型 不同编译器间的比较
- JSP网站利用花生壳在公网上进行访问
- java中Exception in thread "main" java.util.NoSuchElementException
- 批量杀死 MySQL 连接
- Orcal的select into用法
- 浏览器对象模型
- POJ2299Ultra-QuickSort(64位long long)
- highcharts项目笔记-通过Ajax json数据绘制图表
- STL 堆操作
- 第六课堂课后作业
- JSP+JDK+Tomcat+Xp+花生壳+内网
- VC++ 枚举一个文件夹中的某类文件
- poj 1699 Best Sequence
- 查找最小的k 个元素
- chrome 的 flash cookie