給定乙個長度為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...