洛谷P1908歸併排序求逆序對
阿新 • • 發佈:2018-11-25
#include<bits/stdc++.h> #define ll long long #define INF 0x3f3f3f3f using namespace std; int n,a[500010],c[500010]; ll ans=0; void msort(int b,int e){ if(b==e) return; int mid=(b+e)/2,i=b,j=mid+1,k=b; msort(b,mid),msort(mid+1,e); while(i<=mid&&j<=e) if(a[i]<=a[j]) c[k++]=a[i++]; else{ c[k++]=a[j++]; ans+=mid-i+1; } while(i<=mid) c[k++]=a[i++]; while(j<=e) c[k++]=a[j++]; for(int l=b;l<=e;l++) a[l]=c[l]; } int main(){ scanf("%d",&n); for(int i=1;i<=n;i++) scanf("%d",&a[i]); msort(1,n); for(int i=1;i<=n;i++) cout<<a[i]<<" "; return 0; }