逆序對的數量 遞迴 歸併思想

2021-10-08 07:10:23 字數 758 閱讀 5836

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

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

輸入格式

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

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

輸出格式

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

資料範圍

1≤n≤1000001≤n≤100000

輸入樣例:

6

2 3 4 5 6 1

輸出樣例:5

解題思路:

第一組: 2   3   4   5

第二組:1   6

歸併排序時的兩組資料每一組都是已序的,第一組中某個值大於第二組中的某個值,那麼第一組這個值後面的所有值都大於這個值

比如第一組中,2<>1為逆序對,那麼3<>1,4<>1,5<>1都是逆序對

以此遞迴解決即可

int merge_sort(int a, int l, int r) 

while(i <= mid) temp[k++] = a[i++];

while(j <= r) temp[k++] = a[j++];

for (int i = l, j = 0; i <= r; i++, j++) a[i] = temp[j];

return ta + tb + tc;

}

歸併排序 逆序對的數量

傳送門 輸入樣例 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...

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

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

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

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