有一天,LC给我们出了一道题,如图:

45660aba95464e61adfbbcc7cea2c44c.jpg

这个图形从左到右由若干个 宽为1 高不确定 的小矩形构成,求出这个图形所包含的最大矩形面积。

多组测试数据
每组测试数据的第一行为n(0 <= n <= 100), 表示图形有n个小矩形构成
接下来一行输入n个整数h1, h2...hn(0 <= hi <= 1000), 表示每个小矩形的高度
n为0时程序结束

仅输出一行表示面积的最大值

复制
7
2 1 4 5 1 3 3
4
1000 1000 1000 1000
0
8
4000



单调栈
代码:

#include <iostream>
using namespace std;
int n,a[103],stack[103],top,l[103],r[103];
int main()
{
    while(cin>>n&&n){
    top=0;
    a[0]=a[n+1]=-1;
    for(int i=1;i<=n;i++)
    {
        cin>>a[i];
        l[i]=r[i]=i;
    }
    for(int i=1;i<=n+1;i++)
    {
        while(top&&a[i]<=a[stack[top-1]])
        {
            r[stack[top-1]]=i-1;
            top--;
        }
        l[i]=stack[top-1]+1;
        stack[top++]=i;
    }
    int temp=-1;
    for(int i=1;i<=n;i++)
        if((r[i]-l[i]+1)*a[i]>temp)temp=(r[i]-l[i]+1)*a[i];
    cout<<temp<<endl;
    }
}