1. 程式人生 > >[NOI2014]購票

[NOI2014]購票

不錯的一道碼農題。

首先是個dp很顯然了。

然後展開發現是個斜率優化不錯。

但是取值有範圍的。。。。

直接單調佇列並不可以,因為凸包這個東西不是獨立貢獻答案的。

方法比較多,,

 

法一:

直觀的想法是,既然可以轉移的是一個區間,那麼我們能不能快速得到這個區間的凸包呢?

線段樹維護凸包應運而生。

只要在所有拆出來的區間中,分別在其維護的凸包上二分斜率即可。所有的值取min

但是如果dfs順序來做的話,必須要支援凸包的撤銷操作,,,,但是凸包的複雜度是均攤O(1)的,,,可以被特殊構造卡到O(n)。。。。

所以考慮能不能避免撤銷操作。

還有沒有什麼可以動態處理樹鏈的方法呢?

似乎只有樹鏈剖分了。這樣用dfn序維護整顆樹即可。

 

 

 

法二:

點分治