#include <bits/stdc++.h>
using namespace std;
int a[50500];
int ans;
void merge(int lef,int rig)
{
if(lef==rig)
return;
if(lef==rig-1)
{
if(a[lef]>a[rig])
ans++;
return;
}
int mid,i;
mid=(lef+rig)>>1;
merge(lef,mid);
merge(mid+1,rig);
sort(a+mid+1,a+rig+1);
for(i=lef;i<=mid;i++)
{
ans+=upper_bound(a+mid+1,a+rig+1,a[i])-(a+mid+1);
}
}
int main()
{
int i,n;
while(cin>>n)
{
for(i=1;i<=n;i++)
scanf("%d",&a[i]);
ans=0;
merge(1,n);
printf("%d\n",ans);
}
}
51nod 1019 逆序数
最新推荐文章于 2022-02-11 11:43:21 发布