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组成的小矩阵的最大面积。