听灌多(玄关
  • 板块灌水区
  • 楼主Zh_terminal
  • 当前回复8
  • 已保存回复8
  • 发布时间2024/8/15 21:06
  • 上次更新2024/8/16 07:09:32
查看原帖
听灌多(玄关
1388579
Zh_terminal楼主2024/8/15 21:06

Largest Rectangle in a Histogram (POJ 2559)

柱状图是由一些宽度相等的矩形下端对齐后 横向排列得到的图形。现有n个宽度为1,高 度分别是h[1],h[2],...h[n]的矩形从左到右依次排列 组成的柱状图。

问里面包含的长方形(一条边必须水平)的最大面积是多少?

蒟蒻代码本地过,vj提交WA求调

#include <bits/stdc++.h>
using namespace std;
int h[100010];
int solve(int l,int r){
    int ans;
    if(l==r) return h[l];
    int m=(l+r)/2;
    ans=max(solve(l,m),solve(m+1,r));
    int lo=m,hi=m+1;int height=min(h[lo],h[hi]);
    ans=max(ans,height*2);
    while(l<lo||hi<r){
        if(hi<r&&(lo==l||h[lo-1]<h[hi+1])){hi++;height=min(height,h[hi]);}
        else{lo--;height=min(height,h[lo]);}
        ans=max(ans,height*(hi-lo+1));
    }
    return ans;
}
int main(){
    while(1){
        int n;cin>>n;
        if(n==0) break;
        for(int i=1;i<=n;i++) cin>>h[i];
        cout<<solve(1,n)<<endl;
        memset(h,0,sizeof(h));
    }
    return 0;
}
2024/8/15 21:06
加载中...