1.定義
從棧底元素到棧頂元素呈單調遞增或單調遞減,棧內序列滿足單調性的棧;
2.原理
(1)當新元素在單調性上優於棧頂時(單增棧新元素比棧頂大,單減棧新元素比棧頂小),壓棧,棧深+1;
(2)當新元素在單調性與棧頂相同(新元素於棧頂相同)或劣於棧頂時(單增棧新元素比棧頂小,單減棧新元素比棧頂大),彈棧,棧深-1;
3.應用
1.求最長的單調上升、遞減區間
eg.Loongint的花籃
如果對於區間[Si,Sj](1<=i<j<=n)中任意的花籃都比Si高且比Sj低,那么這個區間稱為一個美學區間。
如果根本不存在美學區間,輸出-1。
如果存在美學區間,那么如果任意區間的長度都小於等於k,那么輸出最大的長度,否則輸出最大長度比k大多少(MaxLength-k)。
2.針對每個數,尋找它和它左 / 右邊第一個比它大 / 小的數的值,以及相距多少個數。
eg..POJ 3250
有一群牛站成一排,每頭牛都是面朝右的,每頭牛可以看到他右邊身高比他小的牛。給出每頭牛的身高,要求每頭牛能看到的牛的總數。
3.左右配對
eg. Trapping Rain Water
Given n non-negative integers representing an elevation map where the width of each bar is 1, compute how much water it is able to trap after raining.
For example,
Given[0,1,0,2,1,0,1,3,2,1,2,1], return6.
The above elevation map is represented by array [0,1,0,2,1,0,1,3,2,1,2,1]. In this case, 6 units of rain water (blue section) are being trapped.
4.多個區間中的最值 / 某個數為最值的最長區間
eg.POJ 2796
給你一段區間,需要你求出(在這段區間之類的最小值*這段區間所有元素之和)的最大值
5.巧妙運用pop()后寬度的玄學問題:
1.Largest Rectangle in Histogram
求直方圖中的最大矩陣
For example,
Given height =[2,1,5,6,2,3],
return10.
2.POJ 3494(題1的二維版本)
求僅由0,1組成的矩陣中,全部由1組成的小矩陣的最大面積。



