奇妙的數列(單調棧)

即:

題解

我們分析一下條件,

bj <= bi <= bn 什麼意思? 說明bj和bi都不超過bn,那麼首先可以確定範圍

bi可以在bj~bn的範圍內任意波動,設bm是bn左邊第一個嚴格比它大的數,那麼j只能在m+1~n內取值。

然後可以用反證法證明bj就是m+1到n中的最小值。

那麼可以用一個單調遞減單調棧來算每一個m,然後設第i個元素的“m”爲Ai,不難發現,新加進棧裏的 i 的Ai就是彈出的所有A和 i 中b值最小的那個(標號),即每次(從後往前)彈出標號j時,A_i=(b_j <= b_{A_i}\; ?\; j:A_i);

這樣就可以求出答案了,總複雜度O(n)。

代碼

被狗吃了(找不到題)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章