2299 Ultra-QuickSort(逆序数)

来源:互联网 发布:超星尔雅网络课程机刷 编辑:程序博客网 时间:2024/06/08 19:34

题意:求给定数列的逆序数

#include<stdio.h>#include<string.h>#include<iostream>#include<algorithm>using namespace std;#define maxN 500010int key[maxN],a[maxN];long long num;void fun(int l,int r){if(l==r)return ;int mid=(l+r)/2;fun(l,mid);fun(mid+1,r);int st=l,ls=l,rs=mid+1;while(st<=r&&ls<=mid&&rs<=r){if(key[ls]>key[rs]){a[st++]=key[rs++];num+=mid-ls+1;}elsea[st++]=key[ls++];}while(ls<=mid)a[st++]=key[ls++];while(rs<=r)a[st++]=key[rs++];for(int i=l;i<=r;i++)key[i]=a[i];}int main(){int n;while(scanf("%d",&n)&&n){num=0;for(int i=1;i<=n;i++)scanf("%d",&key[i]);fun(1,n);printf("%lld\n",num);}}