poj 2299 Ultra-QuickSort(归并排序)

维基百科:动画很帅 ,很简明说明归并排序

http://en.wikipedia.org/wiki/Merge_sort

       一看这题  7000MS ,果断 暴力, 结果TLE 。。。。

      然后用归并写了一个,WA ,弱爆了,后来看了下解题报告,

     判断条件考虑不全面。。。。。

#include<stdio.h>
#include<algorithm>
#include<string.h>
using namespace std;
const int N=500005;
__int64 sum,n;
int num[N],stack[N];
void mergesort(int low,int high)
{
if(low==high) return ;
int mid=(low+high)/2;
mergesort(low,mid);
mergesort(mid+1,high);
int i=low,j=mid+1,k=low;
while(k<=high)
{
if(num[i]>num[j]&&j<=high||i>mid)
{
stack[k++]=num[j++];
sum+=mid+1-i;
}
else stack[k++]=num[i++];


}
for (i=low;i<=high;i++)
num[i]=stack[i];
}
int main()
{

while(scanf("%I64d",&n),n)
{
for(int i=1;i<=n;i++)
scanf("%d",&num[i]);
sum=0;
mergesort(1,n);
printf("%I64d\n",sum);
}
return 0;
}



posted @ 2012-03-01 12:29  skyming  阅读(952)  评论(0编辑  收藏  举报