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;
}