/*
归并排序。
*/
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
typedef long long LL;
const int N=500005;
LL a[N],cnt,t[N],n;
void Sort(int l,int r)
{
if(l==r)
return ;
LL mid=l+(r-l)/2;
Sort(l,mid);
Sort(mid+1,r);
int i=l,j=mid+1,now=0;
while(i<=mid&&j<=r)
{
if(a[i]>a[j])
{
cnt+=mid-i+1;
t[++now]=a[j++];
}
else
t[++now]=a[i++];
}
while(i<=mid) t[++now]=a[i++];
while(j<=r) t[++now]=a[j++];
now=0;
for(int k=l;k<=r;k++) a[k]=t[++now];
}
int main()
{
while(cin>>n&&n)
{
for(int i=1;i<=n;i++)
cin>>a[i];
cnt=0;
Sort(1,n);
cout<<cnt<<endl;
}
return 0;
}
归并排序 (看排了多少次)
最新推荐文章于 2024-06-29 16:44:32 发布