POJ 2559 Largest Rectangle in a Histogram ——————单调栈

POJ - 2559 Largest Rectangle in a Histogram 单调栈 Largest Rectangle in a Histogram Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 26415   Accepted: 8536 Description A histogram is a polygon composed of a sequence of re... 阅读详情

POJ 2559 Largest Rectangle in a Histogram

现在有 n n n 个宽度为 1 1 1 ,高度分别为 h 1 , h 2 , . . . , h n h_1,h_2,...,h_n h1​,h2​,...,hn​的长方形从左到右组成的柱状图。问里面包含的长方形的最大面积是多少?

下图对应的样例
7
2 1 4 5 1 3 3
结果是 8 ,图中阴影部分
在这里插入图片描述


用单调栈来维护以 h i h_i hi​为高度的矩阵块的左端点 L i L_i Li​和右端点 R i R_i Ri​;

对于一个单调递增栈来说,它具有向前延伸的性质。
当要加入的元素之前有 n n n个栈元素出栈,那么说明这 n n n个出栈元素都会大于或者等于要入栈的元素。
此时,我们需要维护入栈元素可以向前延伸多少个元素(相当于记录它的前面有多少个元素比它大),
而每个栈顶元素都要向出栈了的元素延伸,因为出栈了的元素一定是比它大的元素。
就在 O ( n ) O(n) O(n)的时间复杂度内解决了上述问题…

我们正向维护单调递增栈的话,可以求得 L i L_i Li​
我们逆向维护单调递增栈的话,可以求得 R i R_i Ri​

最后求一下 h i ∗ ( R i − L i ) h_i*(R_i-L_i) hi​∗(Ri​−Li​) 的最大值就行了

/*--------- Hongjie ----------*/
/**
 *        ┏┓   ┏┓+ +
 *       ┏┛┻━━━┛┻┓ + +
 *       ┃       ┃
 *       ┃   ━   ┃ ++ + + +
 *       ████━████ ┃+
 *       ┃       ┃ +
 *       ┃   ┻   ┃
 *       ┃       ┃ + +
 *       ┗━┓   ┏━┛
 *         ┃   ┃
 *         ┃   ┃ + + + +
 *         ┃   ┃    Code is far away from bug with the animal protecting
 *         ┃   ┃ +     神兽保佑,代码无bug
 *         ┃   ┃
 *         ┃   ┃  +
 *         ┃    ┗━━━┓ + +
 *         ┃        ┣┓
 *         ┃        ┏┛
 *         ┗┓┓┏━┳┓┏┛ + + + +
 *          ┃┫┫ ┃┫┫
 *          ┗┻┛ ┗┻┛+ + + +
 */

// #include<bits/stdc++.h>
#include<map>
#include<set>
#include<queue>
#include<stack>
#include<deque>
#include<cmath>
#include<cstdio>
#include<bitset>
#include<string>
#include<vector>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;

typedef long long ll;
typedef pair<int ,int> P;

const int INF  = 0x3f3f3f3f;
const int MAXN = 1e5+7;
int n;
int h[MAXN],L[MAXN],R[MAXN];
int st[MAXN];

int main(){
        // freopen("../in.txt","r",stdin);
        // freopen("../out.txt","w",stdout);
        ios::sync_with_stdio(0);
        cin.tie(0);
        while(cin>>n&&n) {
                for(int i=0;i<n;++i)
                        cin>>h[i];
                stack<int> s;
                for(int i=0;i<n;++i) {
                        while(!s.empty() && h[s.top()]>=h[i])
                                s.pop();
                        L[i] = (int)s.size() == 0 ? 0 : s.top() + 1;
                        s.push(i);
                }
                while(!s.empty())
                        s.pop();
                for(int i=n-1;i>=0;--i){
                        while(!s.empty() && h[s.top()]>=h[i])
                                s.pop();
                        R[i] = (int)s.size() == 0 ? n : s.top();
                        s.push(i);
                }
                ll ans = 0;
                for(int i=0;i<n;++i)
                        ans = max(ans, (ll)h[i]*(R[i] - L[i]));
                cout<<ans<<endl;
          }
        return 0;
}

CloudCompare横截面工具实战:从点云切片到轮廓提取的完整流程 本文详细介绍了CloudCompare软件中Cross Section工具的核心功能与实战流程。从交互式裁剪框的精准操控,到包络线提取的参数设置与优化,再到内部轮廓提取及批量处理技巧,完整解析了如何从三维点云中高效提取建筑立面、隧道断面等关键轮廓信息,是点云数据处理与分析的实用指南。 阅读详情

相关推荐

卷积码和Turbo码

通信原理相关博文目录:目录我们常在移动通信中遇到的卷积码就是一种非分组码,卷积码和信号处理中的卷积运算有关系吗?是不是就是信号处理中的卷积运算,先看看编码器的编码原理再说:下面是一个比较实用的卷积码编码器:它有三个移位寄存器D0,D1,D2和三个模2加法器,以及一个旋转开关组成,编码前,先将各级移位寄存器清零:现在假设输入的信息码元是1101:当输入的第一个码元为1时,三个模2加法器计算的结果都为...

Reborn Lee 2万+

[POJ 2559 Largest Rectangle in a Histogram] 单调栈

[POJ 2559 Largest Rectangle in a Histogram] 单调栈题目链接:[POJ 2559 Largest Rectangle in a Histogram] 题意描述:给定一个柱形图,总长度为N,每个区间长度为h1,h2,…,hnh_1,h_2,\ldots ,h_n,求在柱形图中的最大面积的矩形。 解题思路: 点击查看单调栈的一些性质:《 [poj 2

Fighting! 600

OpenClaw与Ollama本地AI部署指南

AI模型本地化部署是当前企业数字化转型的关键技术,通过开源框架Ollama可以在消费级硬件上运行大语言模型。本文以OpenClaw多智能体系统为例,详解从环境配置到模型优化的全流程实践,特别针对国内开发者遇到的网络问题提供了镜像加速等解决方案。这种私有化部署方案尤其适合金融数据分析、企业知识管理等对数据安全要求高的场景,通过模块化设计实现多智能体协作,同时保持对NVIDIA显卡和普通CPU的兼容性。

weixin_34302561的博客 398

POJ - 2559 Largest Rectangle in a Histogram(单调栈)

POJ - 2559 题意:给你宽度为一,高度不同的n个矩形,让剪出一个最大面积的矩形。 分析:其实可以转化为求寻找某一子序列,使得(子序列中的最小值乘以子序列的长度)的值最大,也就是遍历每一个位置向左向右找第一个比他小的数,结果就是(右界减左界)* (当前位置高度)。符合单调栈特点:利用单调栈,可以找到从左/右遍历第一个比它小/大的元素的位置 #include<iostream> #...

Stormjing的博客 542

3张RTX 4090就能跑!BAGEL-7B多模态模型本地部署避坑指南(附Flash Attention安装技巧)

本文详细介绍了如何在3张RTX 4090显卡上本地部署BAGEL-7B多模态模型,包括硬件配置、环境设置、多卡并行优化及常见问题解决方案。特别提供了Flash Attention安装技巧和显存优化策略,帮助开发者高效运行这一开源多模态模型,实现文本与图像生成任务。

1a2s3d4f5g的博客 653

别再写前端了!用Gradio 3.x + HuggingFace Spaces,5分钟把你的Python算法变成网页应用

本文介绍如何利用Gradio 3.x和HuggingFace Spaces快速将Python算法转化为网页应用,无需前端开发经验。通过5行代码和简单的Git命令,即可实现专业级Web界面部署,大幅提升算法展示效率。特别适合算法工程师和数据科学家快速分享模型成果。

weixin_33443333的博客 332

【单调栈】POJ-2559 Largest Rectangle in a Histogram

Largest Rectangle in a Histogram Time Limit: 1000MS   Memory Limit: 65536K Description A histogram is a polygon composed of a sequence of rectangles aligned at a common base line.

JSure的代码库 1663

在Windows11上安装ubuntu版linux系统并实现桌面图形化(WSL)

在Windows11上安装ubuntu版linux系统并实现桌面图形化(WSL),xfce桌面美化、安装google-chrome

NiKoJJ‘s Blog 1万+

POJ2559 Largest Rectangle in a Histogram —— 单调栈

题目链接:http://poj.org/problem?id=2559 Largest Rectangle in a Histogram Time Limit:1000MS Memory Limit:65536K Total Submissions:24259 Accepted:7844 Description...

alince20008的博客 127

国科GK7202V300芯片开发避坑指南:从uboot编译到SDK配置的12个实战问题解决

本文针对国科GK7202V300芯片开发过程中的常见难题,提供从uboot编译、SDK配置到系统部署的实战解决方案。详细解析了开发环境搭建、内核编译、驱动模块加载、根文件系统构建及烧写部署等12个关键环节的避坑指南,帮助开发者高效解决编译错误、配置冲突等典型问题,提升开发效率。

sunny的博客 235

基于YOLOv5的隧道衬砌缺陷智能检测系统

计算机视觉在工程检测领域正发挥越来越重要的作用,特别是目标检测技术通过深度学习算法实现了对复杂场景的智能分析。YOLOv5作为当前主流的目标检测框架,通过改进网络结构和训练策略,可以显著提升检测精度和效率。在隧道工程领域,结合通道注意力机制和多尺度特征融合技术,能够有效解决衬砌缺陷识别中的小目标检测难题。这种AI检测系统相比传统人工判读地质雷达图像,不仅将效率提升20倍,还能将识别准确率提高到92.3%,特别适用于3cm以上结构缺陷的自动化检测。系统通过深度可分离卷积等优化,实现了模型轻量化,便于在边缘计算

weixin_29064103的博客 327

Largest Rectangle in a Histogram【POJ 2559】【单调栈】

POJ 2559 题意就是说,有N个柱子,问我们最大的矩形面积是多少?简单明了。 做法很多,笛卡尔树、dp、跳转、吧啦吧啦的……今天我们讲一下单调栈。 我们任意的画一个矩形图,不难发现一件事,一个高度,我们以它为矩形的高的话,它的延伸的范围就是到上一个比他矮的点的后面一位以及到下一个比它矮的前面一位,就是它的水平宽度了。 其中,有单调性。若是我们维护一个单调上升的栈,那...

既然弱小,就只顾变强就是了 405

飞牛fnNAS搭建私有云音乐库

本文介绍了在飞牛NAS上部署Navidrome音乐服务器的完整流程。首先创建音乐存储目录并安装Navidrome应用,然后配置管理员账号、语言设置和音乐路径。接着详细说明使用"音乐标签"软件刮削音乐元数据的方法,包括获取软件、导入音乐文件和自动匹配标签。针对远程访问需求,推荐使用ZeroTier实现内网穿透,并给出注册、创建网络及设备加入的具体步骤。最后介绍移动端使用"音流"APP连接Navidrome服务器的配置方法,实现手机端音乐播放。通过这套方案,用户可以搭建专

dgnankai的专栏 1825

POJ2559 Largest Rectangle in a Histogram [单调栈]

题意: 给定多个矩形,求最大的合并面积。 思路: 和POJ2082【前一篇文章】一样的题目。 还是单调栈的应用,关键还是理解单调时候可以用O(N)的算法处理,所以处理成单调栈。本质思路参看前一篇文章。 不过注意要用__int64或者long long。 #include #include #include #include #define max(a,b) (a>b?a:b)

Aszxqw 858

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

单调栈 poj2559 Largest Rectangle in a Histogram

传送门:点击打开链接 题意:求最大长方形。 思路:以前看训练指南上有利用动态规划的方法求最大子矩阵,但是空间复杂度和实现起来都比较麻烦 利用单调栈来做这题,代码异常简洁明了。维护一个单调栈,从栈底到栈顶是单调递增的。 每一次将一个数加入到栈中时,都要先看栈顶是否有数字大于等于这个数字,如果有就弹起,把这个数字的权值累加到准备加入到栈中的那个数字上去 因为,弹出去的那些高度都比这个要高,所

qwb的博客 903

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

[POJ 2559]Largest Rectangle in a Histogram 题解(单调栈)

[POJ 2559]Largest Rectangle in a Histogram Description A histogram is a polygon composed of a sequence of rectangles aligned at a common base line. The rectangles have equal widths but may have ...

aua4137的博客 186

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

POJ2559 Largest Rectangle in a Histogram【单调栈】

Largest Rectangle in a Histogram Time Limit:1000MS Memory Limit:65536K Total Submissions:29417 Accepted:9502 Description A histogram is a polygon composed of a sequence of re...

逐梦者 278

POJ 2559 Largest Rectangle in a Histogram POJ - 2559 (单调栈)

Description A histogram is a polygon composed of a sequence of rectangles aligned at a common base line. The rectangles have equal widths but may have different heights. For example, the figure on...

~ 408

POJ2559 Largest Rectangle in a Histogram 单调栈

题目链接 http://poj.org/problem?id=2559 分析 单调栈,时刻保证栈内元素单调。 依次扫描每个矩形,若栈空或当前矩形高度不小于栈顶矩形,则直接将该长度为 111 的矩形入栈; 若当前矩形高度小于栈顶矩形,则不断弹出栈顶,直至栈空或当前矩形高度不小于栈顶矩形; 每次新弹出的栈顶矩形一定不比之前弹出的矩形高,因此累加已弹出矩形的长度,再乘以新弹出矩形的高度即可更新答案; 弹...

Kevin的博客 164

POJ 2559 Largest Rectangle in a Histogram(单调栈)

原题目链接:http://poj.org/problem?id=2559 解题思路: 用单调栈求任意每个区间的最小值及区间长度,为什么记录区间最小值呢?(木桶装水原理,装水量取决于最短木板长)。枚举每个区间,维护最大答案。 //自行百度单调栈 AC代码: 1 #include<iostream> 2 #include<cstdio> ...

anshuo0835的博客 100

Largest Rectangle in a Histogram POJ - 2559 单调栈

Largest Rectangle in a Histogram Description A histogram is a polygon composed of a sequence of rectangles aligned at a common base line. The rectangles have equal widths but may have different hei...

SEVENY_的博客 262

POJ - 2559 Largest Rectangle in a Histogram (单调栈)

Largest Rectangle in a Histogram A histogram is a polygon composed of a sequence of rectangles aligned at a common base line. The rectangles have equal widths but may have different heights. For exam...

YOONGI 208

POJ - 2559:Largest Rectangle in a Histogram(单调栈)

本题解析 上面链接讲的非常清楚,而且还有别的方法 自动化学霸宗学长除了写代码之外就是研究单片机小车,他平时最大的爱好就是到某宝上网购各种各样的小车零件,终于有一天,宗学长组装好了N辆小车,宗把他们依次叫做GZ1, GZ2到CZn。为了想他的好朋友们展示他的成果,宗学长把他的N辆小车放在同一起跑线上启动,开始展示它们的性能,然而,N辆小车在前进了若干距离之后纷纷抛锚gg。但是,宗学长非要说他有更大的...

淦淦淦! 296

POJ 2559 - Largest Rectangle in a Histogram | 单调栈

传送门 题意:求直方图中隐藏的最大矩形的面积(默认宽度为1) 首先,只要读懂题意,就不难想到下面这种最简单的解法。这种解法很直观地说明了这道题的核心:左右两边找比自己高的柱子。但是O(n3)的复杂度,一定会T。这里就需要一种快速的查找方法。 #define _CRT_SECURE_NO_WARNINGS #include <iostream> #include <cmath&g...

CarpeDiem 168

[POJ 2559]Largest Rectangle in a Histogram 单调栈

Largest Rectangle in a Histogram Description A histogram is a polygon composed of a sequence of rectangles aligned at a common base line. The rectangles have equal widths but may have different...

weixin_30663391的博客 80
上一篇: POJ 3250 Bad Hair Day——————单调栈
下一篇: BZOJ 1113 海报PLA——————单调栈
陶鸿杰
博客等级 码龄9年 93粉丝 298原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值