單調棧可以存一段元素每個之前第乙個比它小的元素的下標,沒有的置為-1。
以下是單調遞增棧的模板,即棧中的元素為單調遞增的。在入棧之前記錄當前元素左邊第乙個比他小的元素的下標
for
(int i =
1; i <= n;i++
)
以下是單調遞減棧的模板,即棧中的元素為單調遞減的,若當前元素比棧頂元素大,所以棧頂元素為第乙個比當前元素小的數。到最後棧中剩餘元素表示這些元素左邊沒有比它小的元素。
for
(int i =
1;i <= n;i++
) st.
push
(i);
}while
(!st.
empty()
)
相關例題
利用單調棧可以用o(n)的複雜度求出一段序列中某元素左邊第乙個比當前元素大或者小的元素這一性質可以解決許多問題。
基礎模板題:
高階
單調棧 模板 單調棧模板
biu 單調棧主要用於求取左邊第乙個比它大,或者比它小的數。就比如站隊隨便排成一列,可以求到每個人後面第乙個比他高的人。同理可以推廣至右邊,比它矮均可。這就是單調遞增棧 遞減棧,從前至 棧,從後向前入棧的區別了。單調棧比較抽象,非常具有智慧型的想法,可應用的場景相當少,根據幾個經典題目體會它的用法會...
單調佇列模板 例題
單調佇列是指 佇列中元素之間的關係具有單調性,而且,隊首和隊尾都可以進行出隊操作,只有隊尾可以進行入隊操作。單調佇列顧名思義就是乙個有規律的佇列,這個佇列的規律是 所有在佇列裡的數都必須按遞增 或遞減 的順序列隊。例如 有如下一串數字 1 5 3 4 2 首先第乙個數字1先進佇列,que 之後第二個...
單調佇列和單調棧例題
1 單調佇列 給出乙個長度為n的序列和區間長度k 從左向右對每乙個長度為k的區間詢問最大值和最小值。思路 對於最小值,考慮維護乙個遞增的雙端佇列,每次入隊時將隊尾比當前入隊元素的全部刪除,每次取隊首並且判斷是否在當前區間內即可 author hairu,wu from ahut include in...