[题解]洛谷P1908 逆序对
原题
思路
可以用归并排序求逆序对个数
代码
#include<cstdio> using namespace std; long long n,ans=0; void sort(long long A[],long long L,long long R,long long T[]) { if(R-L>1) { long long M=L+(R-L)/2; long long p=L,q=M,i=L; sort(A,L,M,T); sort(A,M,R,T); while(p<M||q<R) { if(q>=R||(p<M&&A[p]<=A[q])) T[i++]=A[p++]; else { T[i++]=A[q++]; ans+=M-p; } } for(i=L; i<R; i++)A[i]=T[i]; } } int main() { long long A[500001],T[500001]; scanf("%lld",&n); for(long long i=0; i<n; i++) scanf("%lld",&A[i]); sort(A,0,n,T); printf("%lld",ans); return 0; }
本篇文章为SHINE_GEEK原创,转载请注明来源!
-------------------------------------
签名:自己选的路,跪着也要走完;理想的实现,需要不懈奋斗!
-------------------------------------
written_by:SHINE_GEEK
blog_addr:www.cnblogs.com/sjrb
-------------------------------------
签名:自己选的路,跪着也要走完;理想的实现,需要不懈奋斗!
-------------------------------------