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

pku2299 Ultra-QuickSort

2010-03-08 10:14 323 查看
题目链接:http://acm.pku.edu.cn/JudgeOnline/problem?id=2299

题意简述:给定一列数,求逆序数。

解题思路:用归并排序的方法,二分求解,直接上自己写的模版。

代码:

#include<stdio.h>
#include<algorithm>
using namespace std;
const int Max=500002;
int a[Max],c[Max];
__int64 cnt;
void MergeSort(int l,int r)   //l起点(1),r终点(n+1)
{
int mid,i,j,tmp;
if(r>l+1)
{
mid=(l+r)/2;
MergeSort(l,mid);
MergeSort(mid,r);
tmp=l;
for(i=l,j=mid;i<mid&&j<r;)
{
if(a[i]>a[j])
{
c[tmp++]=a[j++];
cnt+=mid-i; //
}
else c[tmp++]=a[i++];
}
if(j<r)
for(;j<r;++j) c[tmp++]=a[j];
else
for(;i<mid;++i) c[tmp++]=a[i];
for(i=l;i<r;++i) a[i]=c[i];
}
}
int main()
{
int n;
while(scanf("%d",&n)&&n)
{
for(int i=1;i<=n;i++)
scanf("%d",&a[i]);
cnt=0;
MergeSort(1,n+1);
printf("%I64d/n",cnt);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: