逆序對計數

2021-10-10 22:03:08 字數 868 閱讀 3629

逆序對計數

【問題描述】

對於給定的陣列a,計算其逆序對的總數。即:

image.png

【輸入形式】

輸入包含1組測試用例。

乙個測試用例佔一行,第乙個整數表示陣列的長度,後面緊跟者陣列中的各個整數元素,中間都用乙個空格分開。

陣列的長度範圍

每個數字a[i]的範圍為

【輸出形式】

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

【樣例輸入】

5 1 2 3 5 4

【樣例輸出】

**實現:

#include

using namespace std;

typedef

long

long ll;

int ans;

void

merge

(int a,

int l,

int mid,

int r)

if(i > mid)

for(

int q=j; q<=r; q++

) temp[k++

]= a[q]

;else

for(

int q=i; q<=mid; q++

) temp[k++

]= a[q]

;for

(int p=l; p<=r; p++

) a[p]

= temp[p];}

void

merge_sort

(int a,

int l,

int r)

}int

main()

逆序對計數問題

問題描述 統計乙個陣列中共有多少個逆序對 輸入 第一行乙個整數n,第二行n個整數 輸出 這n個數構成的陣列中逆序對的總數 解題思路 如果用蠻力列舉法,則對每個a i 列舉j j i 並統計逆序對數目 參考如下 int countinver int a int n 平均時間複雜度為o n 2 採用分而...

統計陣列的逆序對

題目描述 在陣列中的兩個數字,如果前面乙個數字大於後面的數字,則這兩個數字組成乙個逆序對。輸入乙個陣列,求出這個陣列中的逆序對的總數。題目 思路 這個最簡單的當然是直接統計了,演算法時間複雜度為n 2,氣泡排序都可以。如果想進一步減少時間複雜度的話,可以考慮用遞迴的方法,比如使用歸併排序。下面貼 i...

分而治之 逆序對計數問題

問題 輸入乙個長度長度為n的陣列a n 求出陣列a n 逆序對的總數。輸入 長度為n的陣列a n 輸出 陣列a n 逆序對的總數 把陣列a二分為兩個子陣列a 1 n 2 a n 2 1 n 遞迴求解子問題 求解s1 僅在a 1 n 2 中的逆序對數目 求解s2 僅在a n 2 1 n 中的逆序對數目...