B - Minimum Sum

纯粹的發表於2024-08-11

原題連結

題解

\(O(n^3)\) 的暴力方法:

遍歷所有區間,然後找出每個區間內的最小值

\(O(n^2)\) 的暴力方法:

考慮每個點的貢獻,往左擴充套件直至出現比其小,往右擴充套件直至出現比其小的

觀察 \(O(n^2)\) 的暴力方法,我們發現往左擴充套件和往右擴充套件相互獨立

所以我們只觀察往左擴充套件

”往左擴充套件直至遇見比自己小的“ 這個不就是找到左邊第一個比自己小的這樣一個經典 的問題嗎?

如果一個選手年齡比你小還比你強,那你可以退役了,也就是說,我們不需要每次遍歷其左邊所有元素

考慮當前數需要遍歷的決策點,如果存在某個決策點,其左邊的數比自己大,那麼左邊這個數就是無用決策點,可以刪除

這樣一來,當前數需要考慮的決策點是一個從左往右下標遞增,數的大小遞增的序列

如果序列的末尾數比當前數大,那麼就刪除,因為不會對後面的答案產生貢獻,如果比自己小,那麼這個數就是當前數的左邊第一個比自己小的的數

然後把當前數插入決策點序列

這樣一來,時間複雜度就是 \(O(n)\)