欢迎光临散文网 会员登陆 & 注册

求逆序对个数归并排序模板

2023-07-25 21:07 作者:喵雕沙  | 我要投稿

#include<bits/stdc++.h>

using namespace std;

char seq[2000005];

int a[2000005];

int b[2000005];

int len;

long long int ans=0;

void Merge(int first,int middle,int last)

{

    int i,j,k;

    i=first;

    j=middle+1;

    k=0;

    while(i<=middle&&j<=last)

    {

        if(a[i]<=a[j])b[++k]=a[i++];

        else ans+=middle-i+1,b[++k]=a[j++];

    }

    while(i<=middle)b[++k]=a[i++];

    while(j<=last)b[++k]=a[j++];

    for(i=1;i<=k;i++)a[first+i-1]=b[i];

}

void MergeSort(int Start,int End)

{

    if(Start<End)

    {

        int Mid=(Start+End)/2;

        MergeSort(Start,Mid);

        MergeSort(Mid+1,End);

        Merge(Start,Mid,End);

    }

}

int main()

{

    scanf("%s",seq+1);

    len=strlen(seq+1);

    for(int i=1;i<=len;i++)a[i]=seq[i]-'A'+1;

    MergeSort(1,len);

    printf("%lld",ans);

    return 0;

}


求逆序对个数归并排序模板的评论 (共 条)

分享到微博请遵守国家法律