复习--Ultra-QuickSort(归并排序求逆序数)
来源:互联网 发布:网络群组信息管理规定 编辑:程序博客网 时间:2024/05/16 18:17
Ultra-QuickSort
Time Limit:7000MS Memory Limit:65536KB 64bit IO Format:%I64d & %I64uDescription
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
每一次归并时,如果要放右侧的数时,那么逆序数 += ( mid - i + 1 )
#include <cstdio>#include <cstring>#include <algorithm>using namespace std;__int64 a[500010] , b[500010] , num ;void f(int x,int y){ int i , j , k ; int m = (x + y) / 2 ; if( y-x > 1) { f(x,m); f(m+1,y); } i = x ; j = m+1 ; k = x ; while( i <= m || j <= y ) { if( j > y || ( i <= m && a[i] < a[j] ) ) b[k++] = a[i++] ; else { b[k++] = a[j++] ; num += m-i+1 ; } } for(i = x ; i <= y ; i++) a[i] = b[i] ;}int main(){ int i , j , n ; while(scanf("%d", &n) && n) { num = 0 ; for(i = 1 ; i <= n ; i++) scanf("%I64d", &a[i]); f(1,n); printf("%I64d\n", num); } return 0;}
0 0
- 复习--Ultra-QuickSort(归并排序求逆序数)
- POJ 2299 Ultra-QuickSort(归并排序求逆序数)
- 10810 - Ultra-QuickSort(归并排序求逆序数)
- 2299 Poj Ultra-QuickSort(归并排序求逆序数)
- (POJ 2299)Ultra-QuickSort 归并排序求逆序数
- Ultra-QuickSort poj2299 (归并排序 求逆序数对)
- Ultra-QuickSort(归并排序+逆序数)
- POJ2299 Ultra-QuickSort 归并排序求逆序数对
- poj 2299 Ultra-QuickSort(归并排序求逆序数)
- Poj 2299 Ultra-QuickSort(归并排序求逆序数)
- poj 2299 Ultra-QuickSort :归并排序求逆序数
- (归并排序求逆序数) poj2299 Ultra-QuickSort
- POJ2299-Ultra-QuickSort (归并排序求逆序数)
- POJ2299 Ultra-QuickSort (归并排序求逆序数模板)
- POJ 2299 Ultra-QuickSort (归并排序求逆序数)
- poj-2299 Ultra-QuickSort 归并排序求逆序数
- POJ 2229 Ultra-QuickSort 归并排序求逆序数
- POJ2299 Ultra-QuickSort(归并排序,求逆序数)
- Android 工程用ant打包
- Android 中自定义权限
- 程序员的生活
- ABAddressBookRequestAccessWithCompletion线程安全
- hdu1272并查集
- 复习--Ultra-QuickSort(归并排序求逆序数)
- Largest Rectangle in Histogram
- Windows power shell 运行方式汇总
- 关于IOS回调的个人看法
- Spring3 MVC 学习笔记
- 日期、时间控件的使用
- 来来回回又到这里
- poj2112 Optimal Milking --- 最大流,二分
- R语言学习(1)-将R作为科学计算器使用