【题意】
给定n个立方体的高度,求最大矩形面积
【输入】
多组数据,数据以单独一行一个0结束
每组数据一行,第一个数字为n,接下来n个数字表示个立方体的高度
【输出】
对于每组数据,输出一个数表示最大矩形面积
单调栈
从左到右从右到左扫描两次,出栈的时候计算最大面积
很不幸的wa,思路不够全面
program poj2559;
var
tot,n,i,j,k,s,e:longint;
now,ans:int64;
h,stack:array [0..100001] of int64;
begin
repeat
read(n);
if n=0 then break;
for i:=1 to n do
read(h[i]);
ans:=0;
h[n+1]:=0;
h[0]:=0;;
tot:=0;
stack[0]:=0;
for i:=1 to n+1 do
if h[i]>h[stack[tot]] then
begin
inc(tot);
stack[tot]:=i
end
else
begin
now:=tot;
while h[stack[now]]>h[i] do dec(now);
for k:=now+1 to tot do
if ans<h[stack[k]]*(stack[tot]-stack[k-1]) then
ans:=h[stack[k]]*(stack[tot]-stack[k-1]);
tot:=now;
inc(tot);
stack[tot]:=i;
end;
tot:=0;
stack[0]:=n+1;
for i:=n downto 0 do
if h[i]>h[stack[tot]] then
begin
inc(tot);
stack[tot]:=i
end
else
begin
now:=tot;
while h[stack[now]]>h[i] do dec(now);
for k:=now+1 to tot do
if ans<h[stack[k]]*(stack[k-1]-stack[tot]) then
ans:=h[stack[k]]*(stack[k-1]-stack[tot]);
tot:=now;
inc(tot);
stack[tot]:=i;
end;
writeln(ans);
until false;
end.