有一天,LC给我们出了一道题,如图:
这个图形从左到右由若干个 宽为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; } }