#38541: 解題報告


dfd8282@gmail.com (fishhh)

學校 : 嘉義市私立嘉華高級中學
編號 : 99760
來源 : [140.114.216.99]
最後登入時間 :
2024-10-27 14:56:56
b469. NOIP2013 Day2.1.积木大赛 -- NOIP2013提高组Day2第一题 | From: [163.27.13.253] | 發表日期 : 2023-12-04 16:31

我用的複雜度是 O(nlogn)

以下是我的做法

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

根據貪心,第一次一定是建造 1~n 裡面最小的,再來會發現最小的那個會變成一個分割點(因為最小的兩邊不可能同時做加法,所以我們可以用類似分治的作法,處裡一個 l,r。

在處裡 l,r 的時候,需要先知道之前已經蓋多少了,然後尋找到 l,r 裡面的最小值(如果有多個,不管選那個都沒差)

就會被轉換成一個RMQ的問題,可以用sparse table 做到 O(1) 查詢,但還有一個問題就是要找切割點(l,r 裡面最小的在哪裡)

可以利用 RMQ l 固定 r 增加會有單調性這個性質去做二分搜,找到切割點。

找到後只要繼續遞迴下去,並且把貢獻回傳即可。

 

 

怎麼感覺我在耍毒

 
ZeroJudge Forum