洛谷 P1908 逆序對(遞迴,歸併排序)

2021-09-27 00:26:36 字數 850 閱讀 6162

題目:

標籤:遞迴、歸併排序

資料量很大,普通的比較很容易超時。

題意是比較找出 a

ia_i

ai​ > a

ja_j

aj​且 i < j 的有序對,因此只需比較a

ia_i

ai​ 和後面的數即可,所以可以用歸併排序,在合併的時候比較。

注意:記錄逆序對的數目ans要用long long 型,雖然資料量n在int範圍內,但是比較結果很容易超過int的儲存範圍。

#include

using

namespace std;

int n, a[

500005

], tmp[

500005];

//a是原序對,tmp是臨時儲存序對

long

long ans =0;

//逆序對的數目,要用long long型

void

merge

(int low,

int high)

//歸併排序

else

}while

(i <= mid) tmp[l++

]= a[i++];

while

(j <= high) tmp[l++

]= a[j++];

for(

int k = low; k <= high; k++

) a[k]

= tmp[k];}

intmain()

洛谷 P1908 逆序對

題目描述 貓貓tom和小老鼠jerry最近又較量上了,但是畢竟都是成年人,他們已經不喜歡再玩那種你追我趕的遊戲,現在他們喜歡玩統計。最近,tom老貓查閱到乙個人類稱之為 逆序對 的東西,這東西是這樣定義的 對於給定的一段正整數序列,逆序對就是序列中ai aj且i var i,n,t longint ...

洛谷P1908 逆序對

貓貓tom和小老鼠jerry最近又較量上了,但是畢竟都是成年人,他們已經不喜歡再玩那種你追我趕的遊戲,現在他們喜歡玩統計。最近,tom老貓查閱到乙個人類稱之為 逆序對 的東西,這東西是這樣定義的 對於給定的一段正整數序列,逆序對就是序列中ai aj且i輸入格式 第一行,乙個數n,表示序列中有n個數。...

洛谷 P1908 逆序對

貓貓tom和小老鼠jerry最近又較量上了,但是畢竟都是成年人,他們已經不喜歡再玩那種你追我趕的遊戲,現在他們喜歡玩統計。最近,tom老貓查閱到乙個人類稱之為 逆序對 的東西,這東西是這樣定義的 對於給定的一段正整數序列,逆序對就是序列中ai aj且i 輸入格式 第一行,乙個數n,表示序列中有n個數...