题解 | #Largest Rectangle in a Histogram#

Largest Rectangle in a Histogram

https://ac.nowcoder.com/acm/contest/22669/O

题意:

求出最大的可以用矩形覆盖的面积

思路:

这题和[USACO 2009 Mar S]Look Up类似,我们只要找到每个矩形左边第一个比它矮的地方和右边第一个比它矮的地方,然后 这两个距离之差 * 矩形高 就行了,从左往右走,如果遇到一个比之前遇到的最高的矮,那就说明那个最高的矩形的面积最大也只能到这了,算出面积后这个矩形就可以不要了。也就是说存的时候是有个单调性的,从矮到高,而且一次操作只对当前最高的矩形进行处理,就能用个栈来存储。

代码:

#include<bits/stdc++.h>
using namespace std;
const int N=100100;
int a[N];
#define PII pair<int,int>//分别存长度和高度
#define ll long long
#define x first
#define y second
int main(){
    
    while(1)
    {
        int n,x;
        cin>>n;
        if(n==0)break;
        for(int i=1;i<=n;i++) scanf("%d",&a[i]);
        stack<PII> st;
        ll ans=0;
        for(int i=1;i<=n;i++)
        {
            int pos=i;
            while(!st.empty() && a[i]<=st.top().x)//如果是一样高的话,要加进来的矩形肯定在那个一样高的矩形右边,也就是比之前那个宽,所以直接删掉之前的,加上现在的。
            {
                pos=min(pos,st.top().y);//pos是这个要加进来的矩形最左能到的位置,因为要删除的矩形比它高,所以加进来的矩形左端点就可以扩展到要删除的矩形的左端点
                ans=max(ans,(ll)(i-pos)*st.top().x);
                st.pop();
            }
            st.push({a[i],pos});
        }
        while(!st.empty()) //从进来到结束都没有遇到比自己矮的或者等高的
        {
            ans=max(ans,(ll)(n-st.top().y+1)*st.top().x);
            st.pop();
        }
        cout<<ans<<endl;
        
        
        
        
    }
    
    
    return 0;
}
全部评论

相关推荐

来,说点可能被同行“骂”的大实话。🙊当初接数字马力Offer时,朋友都说:“蚂蚁的“内包”公司?你想清楚啊!”但入职快一年后的今天,我反而对他有了不一样的看法!🔹&nbsp;是偏见?还是信息差!之前没入职之前外面都在说什么岗位低人一等这类。实际上:这种情况不可至否,不能保证每个团队都是其乐融融。但我在的部门以及我了解的周边同事都还是十分好相处的~和蚂蚁师兄师姐之间也经常开一些小玩笑。总之:身份是蚂蚁公司给的,地位是自己挣的(一个傲娇女孩的自述)。🔹&nbsp;待遇?玩的就是真实!试用期工资全额发!六点下班跑得快(早9晚6或者早10晚7,动态打卡),公积金顶格交。别听那些画饼的,到手的钱和下班的时间才是真的(都是牛马何必难为牛马)。🔹&nbsp;能不能学到技术?来了就“后悔”!我们拥有权限直通蚂蚁知识库,技术栈多到学不完。说“学不到东西”的人,来了可能后悔——后悔来晚了(哈哈哈哈,可以不学但是不能没有)!💥&nbsp;内推地址:https://app.mokahr.com/su/ueoyhg❗我的内推码:NTA6Nvs走我的内推,可以直达业务部门,面试流程更快速,进度可查!今天新放HC,之前挂过也能再战!秋招已经正式开始啦~机会就摆在这,敢不敢来试一试呢?(和我一样,做个勇敢的女孩)
下午吃泡馍:数字马力的薪资一般哇,5年经验的java/测试就给人一万出头,而且刚入职第三天就让人出差,而且是出半年
帮你内推|数字马力 校招
点赞 评论 收藏
分享
点赞 评论 收藏
分享
评论
7
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务