POJ 2299 Ultra-QuickSort £\%%%%%%%%%%%%%%%%%
Ultra-QuickSort
Time Limit:7000 MS |
|
Memory Limit:65536 K |
Total Submissions:43446 |
|
Accepted:15822 |
Description
In this problem, you have to analyze a particle sorting algorithm. the algorithm processes a sequence of n distinct integers by swapping two adjacent sequence elements until the sequence is sZ unknown · unknown "http://www.bkjia.com/kf/ware/vc/" target = "_ blank" class = "keylink"> keys + latency + latency = "pst"> 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 following n lines contains a single integer 0 ¡U a [I] ¡U 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
~~~~É ~~%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% £.
#include
#include
#define M 500010int a[M];int aux[M];long long int ans;using namespace std;void merge(int a[],int l,int mid,int h){ for(int k=l;k<=h;++k) aux[k]=a[k]; int i=l; int j=mid+1; for(int k=l;k<=h;++k) { if(i>mid)a[k]=aux[j++]; else if(j>h)a[k]=aux[i++]; else if(aux[i]=h)return ; int mid=l+(h-l)/2; sort(a,l,mid); sort(a,mid+1,h); merge(a,l,mid,h);}int main(int argc, char *argv[]){ //freopen("2299.in","r",stdin); int n; while(scanf("%d",&n)&&n!=0){ ans=0; for(int i=0;i