归并排序求逆序对

来源:互联网 发布:sql小计合计 编辑:程序博客网 时间:2024/06/07 01:35
#include <iostream>using namespace std;const int maxn = 100000+10;int a[maxn],t[maxn];long long ans=0;void merge_sort(int l,int r){if(l==r) return;int m=(l+r)/2;merge_sort(l,m);merge_sort(m+1,r);int i=l,j=m+1,k=l;while(i<=m&&j<=r){if(a[i]>a[j]){t[k++]=a[j++];ans+=m-i+1;//求逆序对}else{t[k++]=a[i++];}}while(i<=m) t[k++]=a[i++];while(j<=r) t[k++]=a[j++];for(i=l;i<=r;i++) a[i]=t[i];}int main(){int n;cin>>n;for(int i=1;i<=n;i++){cin>>a[i];}merge_sort(1,n);cout<<ans;return 0;}

0 0
原创粉丝点击