您的位置:首页 > 产品设计 > UI/UE

2299 Ultra-QuickSort(逆序数)

2011-11-04 08:55 316 查看
题意:求给定数列的逆序数

#include<stdio.h>
#include<string.h>
#include<iostream>
#include<algorithm>
using namespace std;

#define maxN 500010
int 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;
}else
a[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);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: