單調棧的nt理解

2021-10-20 03:18:00 字數 768 閱讀 1896

給定乙個長度為n的整數數列,輸出每個數左邊第乙個比它小的數,如果不存在則輸出-1。

輸入格式

第一行包含整數n,表示數列長度。

第二行包含n個整數,表示整數數列。

輸出格式

共一行,包含n個整數,其中第i個數表示第i個數的左邊第乙個比它小的數,如果不存在則輸出-1。

資料範圍

1≤n≤105

1≤數列中元素≤109

輸入樣例:

53 4 2 7 5

輸出樣例:

-1 3 -1 2 2

看的時候不太理解,後來相出來一種思路,對於如果ij,a[i]的值將不會被輸出,所以我們想到如對於乙個a[i],我們要找的結果可以分為這麼幾種,a[i-1],a[i-1]之前的數字,-1,

那麼我們先比較a[i-1],如果可以就直接輸出(stk頂)

如果不行,就找乙個離他最近的再次比較,直到找到,否則cout<<-1;

code

#include

using namespace std;

const

int n=

100000+50

;int a[n]

;int stk[n]

;int x,temp;

int tt;

intmain()

if(tt)

else

stk[

++tt]

=a[i];}

return0;

}

單調棧理解及應用

單調棧 棧內元素,按照 單調遞增或單調遞減 排序,如果新入棧元素破壞了單調性,就彈出棧內元素,直到滿足單調性。作用 o n 時間複雜度分別求左右兩邊第乙個比它大或比它小的元素。單調遞增棧為例 維護 每次入棧前先檢驗棧頂元素和進棧元素的大小,判斷棧內元素是否出棧 棧內元素大於等於入棧元素則棧內元素出棧...

單調棧 模板 單調棧模板

biu 單調棧主要用於求取左邊第乙個比它大,或者比它小的數。就比如站隊隨便排成一列,可以求到每個人後面第乙個比他高的人。同理可以推廣至右邊,比它矮均可。這就是單調遞增棧 遞減棧,從前至 棧,從後向前入棧的區別了。單調棧比較抽象,非常具有智慧型的想法,可應用的場景相當少,根據幾個經典題目體會它的用法會...

單調佇列 單調棧

參考文章 單調佇列 poj 2823 給定乙個數列,從左至右輸出每個長度為m的數列段內的最小數和最大數。數列長度 n 106 m n n 106,m n n 106 m n 直接暴力求解複雜度在0 mn 可以考慮維護區間最值,單調佇列則是維護區間佇列的強大 單調佇列的定義 單調佇列實現的大致過程 1...