biu
單調棧主要用於求取左邊第乙個比它大,或者比它小的數。
就比如站隊隨便排成一列,可以求到每個人後面第乙個比他高的人。
同理可以推廣至右邊,比它矮均可。這就是單調遞增棧、遞減棧,從前至**棧,從後向前入棧的區別了。
單調棧比較抽象,非常具有智慧型的想法,可應用的場景相當少,根據幾個經典題目體會它的用法會極大的幫助理解。手動模擬一遍資料就能夠完全理解了。
這裡是拿陣列模擬棧。
模板**:
#include
using
namespace std;
const
int n =
1e5+5;
int n;
int stk[n]
, tt;
intmain()
return0;
}
單調棧模板
顧名思義就是棧裡的元素是單調的。但是這個怎麼使用呢?怎麼就能是單調的呢?看下面的例題 題目給定乙個長度為n的整數數列,輸出每個數左邊第乙個比它小的數,如果不存在則輸出 1。輸入樣例 5 3 4 2 7 5 輸出樣例 1 3 1 2 2 題目意思很容易理解 那麼我們先來看暴力做法,每次取乙個數,與前面...
模板 資料結構 單調佇列 單調棧
一道例題,給定一串數字,求每連續k個數字的最大 最小值。思路 初始化乙個初始長度為k的單調佇列,按從左到右加入元素,同時滿足這個佇列中的元素是遞減的 也就是假如某個數被兩個距離不超過k的大於他的數夾著,他會被從隊尾調出佇列 得到最大值。向右移動一格,假如隊首離開範圍,出隊。往隊尾加入元素前,把隊尾的...
POJ 3250 單調棧模板
題意 從左右給你n頭都面向右牛的高度,每頭牛能被左邊的牛看到當且僅當自己的身高比他低且中間沒有障礙物 求每頭牛能看到的牛數量之和 include include include include include include include include include include inclu...