//单调栈
//思路很好的
#include<cstdio>
#include<iostream>
using namespace std;
const int mn=100005;
int n,h[mn],st[mn],top,l[mn],r[mn];
int main(){
while(~scanf("%d",&n)&&n)
{
top=0;
for(int i=0;i<n;++i)
{
//往左边找小于等于h[i]的坐标的最大值
scanf("%d",h+i);
while(top>0&&h[st[top-1]]>=h[i]) --top;
l[i]=top==0?0:st[top-1]+1;
st[top++]=i;
}
top=0;
for(int i=n-1;i>=0;--i)
{
//往右边找大于h[i]的坐标的最小值
while(top>0&&h[st[top-1]]>=h[i]) --top;
r[i]=top==0?n:st[top-1];
st[top++]=i;
}
poj2559(单调栈)最大矩形面积
最新推荐文章于 2021-09-05 16:26:19 发布