逆序對計數
【問題描述】
對於給定的陣列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 中的逆序對數目...