先吐槽
這題做了兩天,昨天講分治,老師用歸併講了一遍,今天又用樹狀陣列講了一遍
歸併不難,啊啊啊我居然才調出來
歸併兩個陣列時,對於第二個陣列的元素a[c2],它與第乙個陣列中目前還沒歸到總數組裡的元素形成逆序對
c1,c2是指標,對於a[c2],它與a[c1..mid]構成逆序對,貢獻對
臨時陣列c開成全域性變數,函式裡放不下
兩種記錄方式
>函式不返回值,ans開成全域性變數,在每次歸併兩個陣列時增加對數
>函式返回值,ans開在函式裡,賦值遞迴兩個分陣列的返回值之和,再加上歸併兩個陣列時的對數
#include #include#include
#include
#include
#include
using
namespace
std;
long
long
n , ans;
int a[500005] , c[500010
];long
long back(int l , int
r) }
while (c1 <=mid)
c[top++] = a[c1++];
while (c2 <=r)
c[top++] = a[c2++];
for (int i = l ; i <= r ; i++)
a[i] =c[i];
return
ans;
}int
main()
ans = back(1
, n);
cout
<< ans
}
P1908 逆序對 題解
原題鏈結 貓貓 tom 和小老鼠 jerry 最近又較量上了,但是畢竟都是成年人,他們已經不喜歡再玩那種你追我趕的遊戲,現在他們喜歡玩統計。最近,tom 老貓查閱到乙個人類稱之為 逆序對 的東西,這東西是這樣定義的 對於給定的一段正整數序列,逆序對就是序列中a i aj a i a j ai aj ...
P1908 逆序對(歸併排序)
p1908 逆序對 歸併排序 感覺歸併排序和二叉樹神似,歸併排序還是用的是插入排序的原理 歸併排序的時間複雜度見 o nlogn include includeusing namespace std define maxn 0x3333333 int a maxn rrr maxn ans 0,n ...
P1908 逆序對 歸併排序
題目描述 貓貓 tom 和小老鼠 jerry 最近又較量上了,但是畢竟都是成年人,他們已經不喜歡再玩那種你追我趕的遊戲,現在他們喜歡玩統計。最近,tom 老貓查閱到乙個人類稱之為 逆序對 的東西,這東西是這樣定義的 對於給定的一段正整數序列,逆序對就是序列中 ai aja i a jai aj 且 ...