給定乙個長度為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 個整數,表示整個數列。輸出乙個整數,表示逆序對的個數。資料範...