歸併排序求陣列中的逆序對

2021-07-03 09:50:13 字數 896 閱讀 3226

描述

測試說明與提交

提交狀態

題目設定

給定一組數,其中的兩個數字,如果前面乙個數字大於後面的數字,則這兩個數字組成乙個逆序對。輸入乙個陣列,求出這個陣列中的逆序對的總數。

首先輸入資料組數t(1<=t<=100)每組測試資料報括兩行: 

第一行包含乙個整數n,表示陣列中的元素個數。其中1 <= n <= 10^5。

第二行包含n個整數,每個陣列均為int型別。

對應每組測試資料,輸出乙個整數,表示陣列中的逆序對的總數。注意,結果比較大,請用long long!

1

47 5 6 4

5
#include #include#include#include#include#include#includeusing namespace std;

long long sum;

int a[100010];

void merge(int *a,int l,int mid,int r)

}else

}delete l;

delete r;

}void merge_sort(int *a,int l,int r)

}int main()

{ int n,t;

while(~scanf("%d",&t))

{while(t--)

{sum=0;

scanf("%d",&n);

for(int i=0; i

利用歸併排序求陣列中的逆序對

在陣列中的兩個數字,如果前面乙個數字大於後面的數字,則這兩個數字組成乙個逆序對。輸入乙個陣列,求出這個陣列中的逆序對的總數 如陣列,逆序對總共有5對,這道題可以採用歸併排序的思想來處理 先把陣列分成兩個子串行,統計左半部分逆序對的數目和右半部分逆序對的數目,然後將兩個子串行排序,避免重複 然後再統計...

陣列中的逆序對(歸併排序)

在陣列中的兩個數字,如果前面乙個數字大於後面的數字,則這兩個數字組成乙個逆序對。輸入乙個陣列,求出這個陣列中的逆序對的總數。在歸併排序的一次merge中,r j 1 法一 統計i的逆序數 int merge int a,int p,int q,int r int n1 q p 1,n2 r q in...

陣列中的逆序對(歸併排序)

題目 陣列中的逆序對 思路 典型的歸併排序 很好的題目 這是乙個歸併排序的合併過程,主要考慮合併兩個有序序列時,計算逆序對的個數!對於兩個公升序序列,設定兩個下標 前下標和後下標 初始化為前序列第乙個數字的下標和後序列第乙個數字的下標。如果前下標對應的值大於後下標對應的值,則有 前序列剩下的長度 個...