描述
有一天,LC给我们出了一道题,如图:
这个图形从左到右由若干个 宽为1 高不确定 的小矩形构成,求出这个图形所包含的最大矩形面积。
输入
多组测试数据
每组测试数据的第一行为n(0 <= n <= 100), 表示图形有n个小矩形构成
接下来一行输入n个整数h1, h2...hn(0 <= hi <= 1000), 表示每个小矩形的高度
n为0时程序结束
输出
仅输出一行表示面积的最大值
样例输出1
8
4000 单调栈
代码:
#include <iostream>
using namespace std;
int n,a[],stack[],top,l[],r[];
int main()
{
while(cin>>n&&n){
top=;
a[]=a[n+]=-;
for(int i=;i<=n;i++)
{
cin>>a[i];
l[i]=r[i]=i;
}
for(int i=;i<=n+;i++)
{
while(top&&a[i]<=a[stack[top-]])
{
r[stack[top-]]=i-;
top--;
}
l[i]=stack[top-]+;
stack[top++]=i;
}
int temp=-;
for(int i=;i<=n;i++)
if((r[i]-l[i]+)*a[i]>temp)temp=(r[i]-l[i]+)*a[i];
cout<<temp<<endl;
}
}