维基百科:动画很帅 ,很简明说明归并排序
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;
}