我用的複雜度是 O(nlogn)
以下是我的做法
根據貪心,第一次一定是建造 1~n 裡面最小的,再來會發現最小的那個會變成一個分割點(因為最小的兩邊不可能同時做加法,所以我們可以用類似分治的作法,處裡一個 l,r。
在處裡 l,r 的時候,需要先知道之前已經蓋多少了,然後尋找到 l,r 裡面的最小值(如果有多個,不管選那個都沒差)
就會被轉換成一個RMQ的問題,可以用sparse table 做到 O(1) 查詢,但還有一個問題就是要找切割點(l,r 裡面最小的在哪裡)
可以利用 RMQ l 固定 r 增加會有單調性這個性質去做二分搜,找到切割點。
找到後只要繼續遞迴下去,並且把貢獻回傳即可。
(怎麼感覺我在耍毒