首页 > 其他 > 详细

逆序对

时间:2019-05-23 21:48:21      阅读:123      评论:0      收藏:0      [点我收藏+]

关于归并排序求逆序对:

#include<iostream>
#include<cstdio>
using namespace std;
long long n,a[500005],ans=0;
long long f[500005];
void merge_sort(long long l,long long r)
{
    if(l==r)
     return;
     long long mid=(l+r)>>1;
     merge_sort(l,mid);
     merge_sort(mid+1,r);
     long long i=l,j=mid+1,p=l;
     while(i<=mid&&j<=r)
     {
        if(a[i]>a[j])
        {
            f[p++]=a[j++]; ans+=mid-i+1;
         }
         else f[p++]=a[i++];
     }
    while(i<=mid)
      f[p++]=a[i++];
    while(j<=r)
      f[p++]=a[j++];
    for(long long i=l;i<=r;i++)
     a[i]=f[i]; 
}
int main()
{
    scanf("%lld",&n);
    for(long long i=1;i<=n;i++)
     scanf("%lld",&a[i]);
     merge_sort(1,n);
     printf("%lld\n",ans);
    return 0;
}

逆序对

原文:https://www.cnblogs.com/karryW/p/10914623.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!