HDU 1506 Largest Rectangle in a Histogram

来源:互联网 发布:美国黑人政治正确知乎 编辑:程序博客网 时间:2024/06/07 14:36

题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=1506

#include <iostream>#include <cstdio>#include <algorithm>#include <cstring>#include <cctype>#include <cmath>#include <sstream>#include <vector>using namespace std;#define REP(i,a,b) for(int i=a;i<=(int)b;i++)#define REPD(i,a,b) for(int i=a;i>=(int)b;i--)const int maxn=100000+10;typedef long long LL;LL l[maxn],r[maxn],h[maxn];int main(int argc, char const *argv[]){    // freopen("input.in","r",stdin);    int n;    while(scanf("%d",&n)==1&&n) {        REP(i,1,n) cin>>h[i],l[i]=r[i]=i;;        REP(i,1,n) {            while(l[i]>1&&h[l[i]-1]>=h[i]) l[i]=l[l[i]-1];        }        REPD(i,n,1) {            while(r[i]<n&&h[i]<=h[r[i]+1]) r[i]=r[r[i]+1];        }        LL ans=-1;        REP(i,1,n) ans=max(ans,(LL)(r[i]-l[i]+1)*h[i]);                printf("%I64d\n", ans);    }    return 0;}


0 0