POJ 2299 Ultra-QuickSort
来源:互联网 发布:手机java软件免费下载 编辑:程序博客网 时间:2024/06/13 02:32
Ultra-QuickSort
Time Limit: 7000MS Memory Limit: 65536KTotal Submissions: 33404 Accepted: 11953
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
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[n]) { temp[k]=a[m]; m++; k++; } else { temp[k]=a[n]; 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[n]; 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;}
- POJ 2299 Ultra-QuickSort
- poj 2299 Ultra-QuickSort
- poj 2299 Ultra-QuickSort
- poj 2299 Ultra-QuickSort
- poj 2299 Ultra-QuickSort
- poj 2299Ultra-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
- POJ 2299 Ultra-QuickSort
- POJ 2299 Ultra-QuickSort
- POJ 2299 Ultra-QuickSort
- POJ 2299 Ultra-QuickSort
- 线性时间排序习题
- 题1000、1001、1002
- CListBox 带有复选框
- POJ 3461 Oulipo KMP
- HDU2141 Can you find it?
- POJ 2299 Ultra-QuickSort
- php实现类多线程的方法总结
- linux内核VFS虚拟文件系统总结
- 关系数据库原理
- jQuery 01 入门
- expdp时出现错误:ORA-39006: internal error
- ChinaTest 资料下载地址
- hdu 1072 Nightmare
- jQuery 02 选择器