归并排序求逆序对数
Posted Soda
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了归并排序求逆序对数相关的知识,希望对你有一定的参考价值。
Codevs
/* 作者:thmyl 题目:p1688 求逆序对 */ #include<iostream> using namespace std; long long n,a[1000000],tot,temp[10000000]; void sor(int l,int r) { if(l==r)return ; int mid=(l+r)/2; sor(l,mid); sor(mid+1,r); int i=l,p=l,j=mid+1; while(i<=mid&&j<=r) { if(a[i]>a[j])tot+=mid-i+1,temp[p++]=a[j++]; else temp[p++]=a[i++]; } while(i<=mid)temp[p++]=a[i++]; while(j<=r)temp[p++]=a[j++]; for(int i=l;i<=r;i++)a[i]=temp[i]; } int main() { cin>>n; for(int i=1;i<=n;i++) cin>>a[i]; sor(1,n); cout<<tot; }
以上是关于归并排序求逆序对数的主要内容,如果未能解决你的问题,请参考以下文章