題目:標籤:遞迴、歸併排序
資料量很大,普通的比較很容易超時。
題意是比較找出 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個數...