1. 程式人生 > >【歸並排序求逆序對】

【歸並排序求逆序對】

div closed spa main sed pri 歸並 逆序對 con

【AC】

技術分享
 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 typedef long long ll;
 4 
 5 const int maxn=1e5+2;
 6 int a[maxn];
 7 int tmp[maxn];
 8 int n;
 9 ll ans;
10 void Merge(int l,int m,int r)
11 {
12     int i=l,j=m+1;
13     int k=l;
14     while(i<=m&&j<=r)
15     {
16         if
(a[i]<=a[j]) 17 { 18 tmp[k++]=a[i++]; 19 } 20 else 21 { 22 tmp[k++]=a[j++]; 23 ans+=(ll)(m-i+1); 24 } 25 } 26 while(i<=m) tmp[k++]=a[i++]; 27 while(j<=r) tmp[k++]=a[j++]; 28 for(int i=l;i<=r;i++)
29 { 30 a[i]=tmp[i]; 31 } 32 } 33 34 void Merge_Sort(int l,int r) 35 { 36 if(l<r) 37 { 38 int mid=(l+r)>>1; 39 Merge_Sort(l,mid); 40 Merge_Sort(mid+1,r); 41 Merge(l,mid,r); 42 } 43 } 44 int main() 45 { 46 while(~scanf("
%d",&n)) 47 { 48 for(int i=0;i<n;i++) 49 { 50 scanf("%d",&a[i]); 51 } 52 ans=0; 53 Merge_Sort(0,n-1); 54 printf("%lld\n",ans); 55 } 56 return 0; 57 }
歸並排序求逆序對個數

【歸並排序求逆序對】