poj 2299 求逆序数
Posted |瑾诺学长|
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了poj 2299 求逆序数相关的知识,希望对你有一定的参考价值。
http://poj.org/problem?id=2299
#include<iostream> using namespace std; int aa[500010],bb[500010]; long long s=0; void merge(int l,int m,int r) { int i=l,j=m+1,t=0; while(i<=m&&j<=r) { if(aa[i]>aa[j]) { bb[t++]=aa[j++]; s+=m-i+1; } else { bb[t++]=aa[i++]; } } while(i<=m) bb[t++]=aa[i++]; while(j<=r) bb[t++]=aa[j++]; for(int i=0;i<t;i++) { aa[l+i]=bb[i]; } } void Msort (int L,int R) { int cen; if(L<R) { cen=(L+R)/2; Msort(L,cen); Msort(cen+1,R); merge(L,cen,R); } } void merge_sort(int *a,int n) { Msort(0,n-1); } int main() { int n; while(cin>>n) { if(n==0)break; for(int i=0;i<n;i++) { cin>>aa[i]; } merge_sort(aa,n); cout<<s<<endl; s=0; } return 0; }
以上是关于poj 2299 求逆序数的主要内容,如果未能解决你的问题,请参考以下文章
poj 2299 Ultra-QuickSort(树状数组求逆序数+离散化)
POJ 2299 Ultra-QuickSort (树状数组+离散化 求逆序数)