POJ 2299 Ultra-QuickSort
2013-07-21 10:58
323 查看
Ultra-QuickSort
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
Source
Waterloo local 2005.02.05
题目要求是找出冒泡排序中交换的次数,就是统计逆序数,但是用冒泡排序会超时。
所以选择归并排序。
下面是代码。
Time Limit: 7000MS | Memory Limit: 65536K | |
Total Submissions: 33404 | Accepted: 11953 |
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
Source
Waterloo local 2005.02.05
题目要求是找出冒泡排序中交换的次数,就是统计逆序数,但是用冒泡排序会超时。
所以选择归并排序。
下面是代码。
#include <iostream> #include <cstdio> #include <string.h> using namespace std; long long int sum; int mergearray(int a[],int start,int mid,int end,int temp[]) { int m=start,n=mid+1; int k=start; while(m<=mid&&n<=end) { if(a[m]<=a ) { temp[k]=a[m]; m++; k++; } else { temp[k]=a ; n++; k++; sum+=mid-m+1; } } if(m<=mid) while(m<=mid) { temp[k]=a[m]; k++; m++; } else while(n<=end) { temp[k]=a ; k++; n++; } for(int i=start;i<=end;i++) { a[i]=temp[i]; } } int mergesort(int a[],int start,int end,int temp[]) { if(start==end) temp[start]=a[start]; else if(end>start) { int mid=(start+end)/2; mergesort(a,start,mid,temp); mergesort(a,mid+1,end,temp); mergearray(a,start,mid,end,temp); } } int main() { int limit;int a[500050],b[500050]; while(scanf("%d",&limit)&&limit) { for(int i=1;i<=limit;i++) scanf("%d",&a[i]); mergesort(a,1,limit,b); printf("%lld\n",sum); sum=0; } 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 (归并排序)
- POJ 2299--Ultra-QuickSort【逆序数】
- POJ 2299 Ultra-QuickSort(树状数组)
- Ultra-QuickSort-POJ - 2299
- poj2299—Ultra-QuickSort
- POJ 2299 Ultra-QuickSort
- poj 2299 c++: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(归并排序)
- [POJ] 2299 -> Ultra-QuickSort
- POJ2299 Ultra-QuickSort(树状数组求逆序数+离散化)