归并排序求逆序对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的主要内容,如果未能解决你的问题,请参考以下文章

用归并排序或树状数组求逆序对数量 poj2299

POJ - 2299 - Ultra-QuickSort = 归并排序 + 逆序对 / 树状数组

POJ - 2299 Ultra-QuickSort(归并排序)

POJ-2299-Ultra-QuickSort-归并排序求逆序数

poj2299--归并排序求解逆序对

POJ2299 Ultra-QuickSort