大佬讲解:http://blog.csdn.net/dgq8211/article/details/7740610
http://blog.csdn.net/u013491262/article/details/22900261
这个图形从左到右由若干个 宽为1 高不确定 的小矩形构成,求出这个图形所包含的最大矩形面积。
多组测试数据 每组测试数据的第一行为n(1 <= n <= 100000), 表示图形有n个小矩形构成. 接下来一行输入n个整数h1, h2...hn (0 <= hi <= 1000000000, 1 <= i <= n), 表示每个小矩形的高度 n为0时程序结束
仅输出一行表示面积的最大值
7 2 1 4 5 1 3 3 4 1000 1000 1000 1000 0
8 4000
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn = 1e5+5;
int q[maxn] = {-1}, w[maxn];
int main()
{
int n, h;
while(scanf("%d", &n), n)
{
int top = 0;
ll ans = 0;
for(int i = 1; i <= n+1; i++)
{
if(i != n+1) scanf("%d", &h);
else h = 0;
if(h > q[top])
q[++top] = h, w[top] = 1;
else
{
ll cnt = 0;
while(h <= q[top])
{
ans = max(ans, (cnt + w[top]) * q[top]);
cnt += w[top--];
}
q[++top] = h;
w[top] = cnt + 1;
}
}
printf("%I64d\n", ans);
}
return 0;
}