逆序對的數量 歸併排序模擬

2021-10-20 03:26:11 字數 864 閱讀 9677

題目鏈結

給定乙個長度為n的整數數列,請你計算數列中的逆序對的數量。

逆序對的定義如下:對於數列的第 i 個和第 j 個元素,如果滿足 i < j 且 a[i] > a[j],則其為乙個逆序對;否則不是。

第一行包含整數n,表示數列的長度。

第二行包含 n 個整數,表示整個數列。

輸出乙個整數,表示逆序對的個數。

資料範圍

1≤n≤100000

62 3 4 5 6 1

我們可以用歸併排序來進行操作.在歸併的同時,我們發現如果乙個數不符合順序的話,他肯定會小於左邊後續的數,所以我們就可以計算出數量,在排序完成時,也實現了計數.

#include

#include

#include

using namespace std;

const

int maxn=

1e5+5;

typedef

long

long ll;

int a[maxn]

,q[maxn]

;int n;

ll merge_sort

(int a,

int l,

int r)

}while

(i<=mid) q[cnt++

]=a[i++];

while

(j<=r) q[cnt++

]=a[j++];

for(

int i=l,j=

0;i<=r;i++

,j++

)return res;

}int

main()

歸併排序 逆序對的數量

傳送門 輸入樣例 62 3 4 5 6 1 輸出樣例 5思路 利用歸併排序的思維統計逆序對的數量,可分為三種情況。實現 include using namespace std typedef long long ll const int maxn 1e6 5 int n int q maxn tmp...

逆序對 模擬歸併排序

逆序數的定義 如果 i j 且a i a j 則a i 和a j 即為逆序數對 給一列數,求它的逆序對數,即有多少個有序對 i.j 使得i在歸併排序的基礎上記上了乙個逆序對個數的統計 ans mid i 1 void merge int arr,int left,int mid,int right ...

C 逆序對的數量(歸併排序)

給定乙個長度為n的整數數列,請你計算數列中的逆序對的數量。逆序對的定義如下 對於數列的第 i 個和第 j 個元素,如果滿足 i j 且 a i a j 則其為乙個逆序對 否則不是。輸入格式 第一行包含整數n,表示數列的長度。第二行包含 n 個整數,表示整個數列。輸出格式 輸出乙個整數,表示逆序對的個...