首页 > 其他 > 详细

hdu 1506 直方图内最大矩形

时间:2019-07-30 11:21:44      阅读:58      评论:0      收藏:0      [点我收藏+]

题目传送门//res tp hdu
单调栈的经典问题
维护区间的左右边界计算面积即可

#include<iostream>
#include<algorithm>
#include<stack>
using namespace std;
typedef long long ll;
const int L = 100010;
ll H[L];
int n;
ll Maxrectangle(){
    ll ans = 0;
    stack<int>M;
    for(int k = 1;k<=n;){
        if(M.empty()||H[M.top()] <=H[k])
            M.push(k++);
        else{
            ll h = H[M.top()];M.pop();
            if(M.empty())
                ans = max(ans,(k-1)*h);
            else
                ans = max(ans,(k-M.top()-1)*h);
        }
    }
    while(!M.empty()){
        ll h = H[M.top()];M.pop();
        if(M.empty())
            ans = max(ans,n*h);
        else
            ans = max(ans,(n-M.top())*h);
    }
    return ans;
}
int main(){
    while(scanf(" %d",&n)!=EOF&&n){
        for(int i = 1;i<=n;++i) cin>>H[i];
        ll ans = Maxrectangle();
        cout<<ans<<endl;
    }
    
}

hdu 1506 直方图内最大矩形

原文:https://www.cnblogs.com/tea-egg/p/11268728.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!