1688 求逆序對
阿新 • • 發佈:2017-06-02
題目 codevs ger sample -i icon 逆序 -h else
codevs——1688 求逆序對
前面剛剛說了逆序對,那就先那個題來練練手吧。。。(雖然是個板子(⊙o⊙)…)
時間限制: 1 s 空間限制: 128000 KB 題目等級 : 黃金 Gold 題目描述 Description給定一個序列a1,a2,…,an,如果存在i<j並且ai>aj,那麽我們稱之為逆序對,求逆序對的數目
數據範圍:N<=105。Ai<=105。時間限制為1s。
輸入描述 Input Description
第一行為n,表示序列長度,接下來的n行,第i+1行表示序列中的第i個數。
輸出描述 Output Description所有逆序對總數.
樣例輸入 Sample Input4
3
2
3
2
樣例輸出 Sample Output3
代碼:
#include<cstdio> #include<iostream> #include<algorithm> #define N 100001 using namespace std; int n,a[N]; long longans; void gsort(int l,int r) { if(l==r) return ; int mid=(l+r)/2;int tmp[N]; gsort(l,mid),gsort(mid+1,r); int i=l,j=mid+1,k=l; while(i<=mid&&j<=r) { if(a[i]<=a[j]) tmp[k++]=a[i++]; else { ans+=mid-i+1; tmp[k++]=a[j++]; } } while(i<=mid) tmp[k++]=a[i++]; while(j<=r) tmp[k++]=a[j++]; for(int i=l;i<=r;i++) a[i]=tmp[i]; } int main() { scanf("%d",&n); for(int i=1;i<=n;i++) scanf("%d",&a[i]); gsort(1,n); cout<<ans; return 0; }
1688 求逆序對