单调栈|图
lc85
预处理后
复用84题的抽象思想
单增栈,填每个位置比h[i]矮的 左&右边界
ret==max每一行的矩形max

lc84
单增栈,填每个位置左&右边界

class Solution {
public:
int largestRectangleArea(vector<int>& heights) {
int n = heights.size();
vector<int> left(n, -1);//init
vector<int> right(n, n);
stack<int> st;
for (int i = 0; i < n; ++i)
{
// 右边界
while (!st.empty() && heights[i] < heights[st.top()])
{
int idx = st.top();
st.pop();
right[idx] = i;
}
// 左边界
if (!st.empty())
{
left[i] = st.top();
}
st.push(i);
}
int mx = 0;
for(int i=0;i<n;i++)
{
mx=max(mx,(right[i]-left[i]-1)*heights[i]);
}
return mx;
}
};
