归并排序求逆序对poj2299
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了归并排序求逆序对poj2299相关的知识,希望对你有一定的参考价值。
#include<iostream>
using namespace std;
int a[500100];
int t[500100];
long long ans;
void sort(int l,int r)
{
if(l==r) return ;
int mid=(l+r)/2;
sort(l,mid);
sort(mid+1,r);
int i,j,k;
i=l;j=mid+1;k=l;
while(i<=mid||j<=r)
{
if(j>r||(a[j]>a[i]&&i<=mid))
t[k++]=a[i++];
else {
t[k++]=a[j++];
ans+=mid+1-i;
}
}
for (i=l;i<=r;i++)
a[i]=t[i];
}
int main()
{
int n;
cin>>n;
while(n!=0){
for (int i=1;i<=n;i++)
cin>>a[i];
ans=0;
sort(1,n);
cout<<ans<<endl;
cin>>n;
}
return 0;
}
以上是关于归并排序求逆序对poj2299的主要内容,如果未能解决你的问题,请参考以下文章
POJ - 2299 - Ultra-QuickSort = 归并排序 + 逆序对 / 树状数组
POJ - 2299 Ultra-QuickSort(归并排序)