3 3 1 2
2
#include<iostream>
using namespace std;
#define M 1000010
int a[M];
int aux[M];
long long int ans;
void merge(int a[],int l,int mid,int h)
{
int i=l;
int j=mid+1;
for(int k=l;k<=h;++k)
aux[k]=a[k];
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]>aux[j])
{
a[k]=aux[j++];
ans+=mid-i+1;
}
else
a[k]=aux[i++];
}
}
void sort(int a[],int l,int h)
{
if(l>=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("3743.in","r",stdin);
int n;
while(scanf("%d",&n)!=EOF)
{
memset(a,0,sizeof(a));
memset(aux,0,sizeof(aux));
int i=0;
while(n--)
{
scanf("%d",&a[i++]);
}
ans=0;
sort(a,0,i-1);
printf("%lld\n",ans);
}
return 0;
}
原文地址:http://blog.csdn.net/wdkirchhoff/article/details/41820229