归并排序 逆序数

Posted bxd123

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了归并排序 逆序数相关的知识,希望对你有一定的参考价值。

  很好理解:

int n,a[500010],c[500010];
long long ans;
void msort(int L,int R)
{
    if(L==R)return ;
    int mid=(L+R)>>1;
    msort(L,mid);
    msort(mid+1,R);
    int i=L,k=L,j=mid+1;
    while(i<=mid&&j<=R)
        if(a[i]<=a[j])
        c[k++]=a[i++];
        else
        c[k++]=a[j++],ans+=mid-i+1;
    while(i<=mid)
        c[k++]=a[i++];
    while(j<=R)
        c[k++]=a[j++];
    rep(i,L,R)
    a[i]=c[i];
}
int main()
{
    int n;
    RI(n);
    rep(i,1,n)
    RI(a[i]);
    msort(1,n);
    cout<<ans;
    return 0;
}

 

以上是关于归并排序 逆序数的主要内容,如果未能解决你的问题,请参考以下文章

E - 归并排序 求逆序数

算法基础题 - 逆序数,归并排序

归并排序(逆序数问题)详解

逆序数(归并排序)

51 Nod 1019 逆序数(归并排序)

归并排序求逆序对