poj2559(单调栈)最大矩形面积

poj2559(单调栈)最大矩形面积_第1张图片

//单调栈
//思路很好的 
#include
#include
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;i0&&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;
		}
		long long ans=0;
		for(int i=0;i


你可能感兴趣的:(单调栈)