归并排序求逆序对

来源:互联网 发布:云计算行业报告 编辑:程序博客网 时间:2024/06/04 19:55
#include<cstdio>#include<cstring>#include<algorithm>using namespace std;const int MAXN=400001;int n,a[MAXN],b[MAXN];int ans;void mergesort(int l,int r){    if (l==r) return;    int mid=(l+r)/2;     mergesort(l,mid);    mergesort(mid+1,r);    int i=l,j=mid+1,k=l;    while (i<=mid&&j<=r)    {        if (a[i]<=a[j]) {b[k]=a[i]; k++; i++;}        else {b[k]=a[j]; k++; j++; ans+=mid-i+1;}    }    while (i<=mid) {b[k]=a[i]; i++; k++;}    while (j<=r) {b[k]=a[j]; k++; j++;}    for (int i=l; i<=r; i++)        a[i]=b[i];}int main(){    scanf("%d",&n);    for (int i=1; i<=n; i++) scanf("%d",&a[i]);    mergesort(1,n);    for (int i=1; i<=n; i++) printf("%d ",a[i]);    printf("%d",ans);    return 0;}/*65 4 2 6 3 1*/
原创粉丝点击