复习--Ultra-QuickSort(归并排序求逆序数)
2014-07-30 16:25
330 查看
Ultra-QuickSort
Time Limit:7000MS Memory Limit:65536KB 64bit IO Format:%I64d & %I64u
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.
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
Sample Output
Time Limit:7000MS Memory Limit:65536KB 64bit IO Format:%I64d & %I64u
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.
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
5 9 1 0 5 4 3 1 2 3 0
Sample Output
6 0
每一次归并时,如果要放右侧的数时,那么逆序数 += ( 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; }
相关文章推荐
- POJ2299 Ultra-QuickSort (归并排序求逆序数模板)
- poj 2299 Ultra-QuickSort 归并排序(求逆序数模板)
- poj 2299 Ultra-QuickSort(归并排序求逆序数)
- poj 2299 Ultra-QuickSort (归并排序 求逆序数)
- POJ 2299 Ultra-QuickSort (归并排序、逆序数)
- POJ 2299 Ultra-QuickSort (归并排序求逆序数)
- Ultra-QuickSort(归并排序记录逆序数)
- POJ2299 Ultra-QuickSort(归并排序,求逆序数)
- Ultra-QuickSort--POJ2299(归并排序求逆序数对)
- Poj 2299 Ultra-QuickSort(归并排序求逆序数)
- Poj 2299 Ultra-QuickSort(归并排序求逆序数)
- POJ 2299 Ultra-QuickSort(归并排序求逆序数)
- POJ 2299 Ultra-QuickSort (求逆序数:离散化+树状数组或者归并排序求逆序数)
- poj 2229 Ultra-QuickSort (归并排序求逆序数对)
- poj(2299)——Ultra-QuickSort(归并排序求逆序数)
- poj-2299 Ultra—QuickSort(归并排序求逆序数)
- POJ训练计划2299_Ultra-QuickSort(归并排序求逆序数)
- POJ2299-Ultra-QuickSort (归并排序求逆序数)
- poj 2299 Ultra-QuickSort (归并排序,逆序数)
- 10810 - Ultra-QuickSort(归并排序求逆序数)