poj2559

【题意】

给定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 ansh[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


你可能感兴趣的:(poj2559)