Ultra-QuickSort poj2299 (归并排序 求逆序数对)
2016-12-31 10:49
302 查看
[align=center]Ultra-QuickSort[/align]
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: 65536K | |
Total Submissions: 57649 | Accepted: 21298 |
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
///2299 MergeSort #include <iostream> #include <cstdio> using namespace std; const int maxn=500010; int num[maxn],temp[maxn]; long long sum; void Merge(int low,int mid,int high) { int i=low; int j=mid+1; int cnt=1; ///cnt 多加了一个 while(i<=mid && j<=high) { if(num[i] < num[j]) ///防止相等的时候计算逆序对 { temp[cnt++]=num[i++]; } else { temp[cnt++]=num[j++]; sum+=mid+1-i; ///左边的元素比右边的大,那么左边剩下的没比完的元素和这个右边的元素都构成了逆序对 /// 12354 5和4 比较; 逆序对就是1 12543 5和4 然后就是12453 4和3 } } while(i<=mid) { temp[cnt++]=num[i++]; } while(j<=high) { temp[cnt++]=num[j++]; } for (i=1;i<cnt;i++) /// 从low开始复制回去 { num[low+i-1]=temp[i]; } } void msort(int low,int high) { int mid; if (low<high) { mid=(low+high)/2; msort(low,mid); msort(mid+1,high); Merge(low,mid,high); } } int main() { int i,n; while(cin>>n && n) { sum=0; for(i=1; i<=n; i++) { scanf("%d",&num[i]); } msort(1,n); printf("%lld\n",sum); } return 0; }
相关文章推荐
- POJ训练计划2299_Ultra-QuickSort(归并排序求逆序数)
- POJ 2299 Ultra-QuickSort【求逆序数:归并排序|树状数组】
- POJ 2299 Ultra-QuickSort(归并排序求逆序数)
- 复习--Ultra-QuickSort(归并排序求逆序数)
- poj 2299 Ultra-QuickSort 归并排序(求逆序数模板)
- poj 2299 Ultra-QuickSort(归并排序求逆序数)
- poj 2299 Ultra-QuickSort (归并排序 求逆序数)
- Poj 2299 Ultra-QuickSort(归并排序求逆序数)
- Poj 2299 Ultra-QuickSort(归并排序求逆序数)
- POJ 2299 Ultra-QuickSort (求逆序数:离散化+树状数组或者归并排序求逆序数)
- poj-2299 Ultra—QuickSort(归并排序求逆序数)
- POJ训练计划2299_Ultra-QuickSort(归并排序求逆序数)
- poj2299 Ultra-QuickSort&&NYOJ117 求逆序数 (树状数组求逆序对数+离散化)+(归并排序)
- POJ 2299 Ultra-QuickSort (归并排序求逆序数)
- POJ2299-Ultra-QuickSort (归并排序求逆序数)
- poj(2299)——Ultra-QuickSort(归并排序求逆序数)
- Ultra-QuickSort--POJ2299(归并排序求逆序数对)
- POJ 2299 Ultra-QuickSort (归并排序、逆序数)
- (归并排序求逆序数) poj2299 Ultra-QuickSort
- Ultra-QuickSort(归并排序记录逆序数)