POJ2299Ultra-QuickSort

时间:2022-07-13 18:33:01

http://poj.org/problem?id=2299

题意 : 排序,求排序次数,本来以为用冒泡可以搞定,事实上,那么大的数据以及一个TLE告诉我,会超时.........

思路 : 问了一下,这个题就是归并排序求逆序数,可以百度一下,看了白皮书

#include<cstdio>
#include<cstring>
#include<iostream>
using namespace std ;
int A[],T[];
long long cnt ;
void merge_sort(int* A,int x,int y,int* T)
{
if(y-x>)
{
int m = x+(y-x)/ ;
int p = x,q = m ,i = x ;
merge_sort(A,x,m,T);
merge_sort(A,m,y,T);
while(p < m || q < y)
{
if(q >= y || (p < m && A[p] <= A[q]))
T[i++] = A[p++];
else
{
T[i++] = A[q++] ;
cnt += m-p ;
}
}
for(i = x ; i < y ; i++)
A[i] = T[i] ;
}
}
int main()
{
int n;
while(scanf("%d",&n)!=EOF)
{
if(n == )
break ;
cnt = ;
for(int i = ; i <= n ; i++)
{
scanf("%d",&A[i]) ;
}
merge_sort(A,,n+,T);
printf("%lld\n",cnt) ;
}
return ;
}