HDU 1506 Largest Rectangle in a Histogram

农经权二轮延包—地块示意图生成 本文介绍了地块示意图制作软件的使用方法及模板制作要点。软件通过设置六个参数(示意图模板、属性数据、地块DBF、导航图、地块图片及存放位置)自动生成Word文档,并可导出PDF。文章详细说明了5页Word模板的制作过程,包括页脚三栏设置和页码插入技巧,支持每户最多28个地块的情况。同时指出该软件生成的图片分辨率(300dpi)满足清晰度要求,并提及软件免费提供插件但收费提供后续服务。 阅读详情

传送门

直方图dp。(我自己起的名字)
可以想到最后答案的形状一定可以是某个完整的柱形以自己完整的高度往左右扩散而得到的,扩散到什么地步呢?往左扩散到第一个小于自己高度的地方(从当前往左数),往右也扩散到第一个小于自己高度的地方(从当前往右数)。也就是说,中间这个完整的柱形一定是整个矩形的最低点(木板效应)。
(最后答案可能只包括自己柱形的一部分(比如11211),但在最后答案中一定可以找到某一个柱形被完整包含)

所以这N个柱形,每一个柱形都对应一个这样的基于自身的最大矩形。那么最终答案一定在这N个最大矩形之中。

那么问题就是怎么求每个柱形的最大矩形,其实只要从这个柱形的下标出发,分别往左右找第一个小于它高度的柱形,再记录下标就ok了。往左往右是同样的原理,我们只用分析一种即可。

  1. 那么怎么找往左的第一个小于自己的下标呢?(实际是记录这个下标的后一个,作为l[i]),最简单的方法是从当前下标开始往左依次循环判断。
  2. 但是我们可以利用l[i-1]来加速这个过程。前一个柱形h[i-1]和当前柱形h[i]的关系只有两种,如果h[i-1]<h[i],那么直接就判断出来了。
  3. 如果h[i-1]>=h[i],那么我们可以跳过从i-1到l[i-1]这些柱形,直接去判断h[l[i-1]-1]与h[i]的关系。

以上加速过程建立在先前的值都已计算过的基础上,所以第一层循环从左往右,第二层循环从当前往左(这个东西是跳着找的,一段一段地跨越,充分利用历史信息)。

最后,这个题的高度上限给的很大(1e9),和底边乘起来会溢出的,需要转为__int64类型,输出用%I64d。查了一下才发现C++的64位整数的定义很乱,反正记住这三对应该可以应付各种环境了。
(1.long long,%lld 2.long long,%I64d 3.__int64,%I64d,参考资料)


#include <cstdio>
#include <iostream>
#include <algorithm>
#include <vector>
#include <cstring>
#include <string>
#include <queue>
using namespace std;                               // 直方图dp

const int MAXN = 1e5;
int N;
int h[MAXN];
int l[MAXN], r[MAXN];

void init(){}

int main()
{
	int t;
	for (; ~scanf("%d", &N);)
	{
		if (N == 0) break;
		init();
		for (int i = 0; i < N; i++) 
			scanf("%d", &h[i]);

		l[0] = 0;
		for (int i = 1; i < N; i++)
		{
			for (t = i; t - 1 >= 0 && h[t - 1] >= h[i]; t = l[t - 1]);
			l[i] = t;
		}

		r[N - 1] = N - 1;
		for (int i = N - 2; i >= 0; i--)
		{
			for (t = i; t + 1 < N && h[t + 1] >= h[i]; t = r[t + 1]);
			r[i] = t;
		}

		__int64 ans = -1;
		for (int i = 0; i < N; i++)
			ans = max(ans, ((__int64)h[i] * (__int64)(r[i] - l[i] + 1)));   // 哈哈哈 64的类型转换不能等他俩乘完了再转,乘完都溢出了
		printf("%I64d\n", ans);
	}

	return 0;
}
CondaHTTPError: HTTP 404 NOT FOUND for url 用conda创建新环境时出现问题了。 阅读详情

相关推荐

【win10+RAGFlow+Ollama】搭建本地大模型助手(教程+源码)

在当今科技飞速发展的时代,人工智能(AI)已经成为各行各业不可或缺的一部分。特别是在文档处理和数据分析领域,AI的应用更是无处不在。今天,我要向大家介绍一个开源的AI框架引擎——RAGflow。它能够在深度文档理解方面执行检索增强生成(Retrieval-Augmented Generation,简称RAG),并且被认为是目前最优秀的RAG框架之一。本文将详细探讨RAGflow的创新功能、技术特点以及如何在实际应用中发挥其最大潜力。

Yooao的博客 9618

HDU - 1506 Largest Rectangle in a Histogram

题目 HDU - 1506 Largest Rectangle in a Histogram 做法 以\(a_i\)为最高高度,以\(i\)向左右扩展 找到\(i\)左边比\(a_i\)小的最右边的位置 找到\(i\)有边比\(a_i\)小的最左边的位置 然而十天后又忘了,来补下笔记: 这里单调栈维护的是一个从顶到底递减的,当栈顶更大显然现在在的这个位置更优那就弹出栈顶 简直是单调栈的模板题 My...

weixin_30843605的博客 93

2025年度工业级3D全景相机技术解析选型参考:国产品牌的技术突围与市场格局

本文分析了工业级3D相机在智慧城市和建筑数字化中的应用。通过对比国内外主流设备的技术参数和应用场景,发现国产品牌如众趣科技在性价比和本地化服务方面具有优势,尤其适合大型空间扫描项目;而国际品牌如Faro、Leica则在精度和可靠性上保持领先。建议根据项目需求(如测距范围、精度要求、预算)进行设备选型,综合考虑扫描效率、数据处理能力和系统兼容性。国产品牌已在国内大型基建项目中展现出竞争力,国际品牌则更适合高精度逆向工程和国际化项目。

gxdtgsy的博客 1072

HDU 1506 Largest Rectangle in a Histogram【单调栈/单调队列】

HDU 1506 Largest Rectangle in a Histogram 题意: 给出一个长度为n的序列,这些序列代表每个宽度为1的矩形的高,矩形是按顺序连在一起的,问最大相连面积(高为相连矩形的最小)。 思路: 对于每个最大连续的矩阵区间,如果它的边界有比这个区间最矮的矩形高的矩形,那么高的矩形肯定会被合并进去的。即找到每个节点的从左(从右)第一个比它小的节点, 这样就是当前节点能构成...

nefu_ljw的博客 322

基于BS21的星闪模块设计电路SLE/BLE

基于BS21的星闪模块设计电路SLE/BLE HI2821

2503_91889531的博客 2739

李宏毅机器学习笔记第17周_概述领域自适应(Domain Adaptation)

Domain Adaptation

peaunt1的博客 1104

HDU 1506 Largest Rectangle in a Histogram(dp)

题目链接:HDU 1506 Largest Rectangle in a Histogram 对于每一块木板,Area=height[i]*(j-k+1) 设其中任一块x, j=height[i]; 找j,k成为关键。 利用动态规划,如果它左边高度大于等于它本身,那么它左边的左边界一定满足这个性质,再从这个边界的左边迭代下去。左边界迭代完再迭代右边界。 在杭电提交了好多次都是TLE,

fobdddf的专栏 502

手把手教你用STM32单片机控制双向可控硅调光(附完整代码+电路图)

本文提供了一套完整的STM32单片机控制双向可控硅实现灯光无级调光的实战方案。详细讲解了硬件电路设计,包括过零检测与隔离驱动,并剖析了基于定时器中断的软件核心逻辑,通过精准的相位角计算实现平滑的灯光强度控制。附有完整代码与电路图,适合嵌入式开发者实践。

weixin_29194255的博客 955

hdu1506 Largest Rectangle in a Histogram

Largest Rectangle in a Histogram Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 6301    Accepted Submission(s): 1803 Problem Descriptio

Shirley 3113

dolphinscheduler-3.4.0

dolphinscheduler集群部署

docsz的博客 660

lvgl 9虚拟键盘控件 (lv_keyboard) 使用指南

是 LittlevGL 提供的一个虚拟键盘控件,适用于在图形界面中输入文本。与按钮矩阵类似,虚拟键盘预定义了多个键位布局,支持多种模式和自定义键位映射,能够满足各种文本输入需求。通过与文本区域 (Text Area) 的结合,键盘能够自动将输入的字符传送到指定区域。控件是 LittlevGL 提供的强大虚拟键盘解决方案,适用于任何需要文本输入的界面。通过预定义的键盘模式、自定义键位映射和文本区域自动填充功能,可以大大提升用户输入体验。无论是在嵌入式系统的用户界面中,还是在其他需要虚拟键盘的应用中,

m0_62599305的博客 2185

HDU1506Largest Rectangle in a Histogram

Largest Rectangle in a Histogram Time Limit: 2000/1000 MS (Java/Others)Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 27901Accepted Submission(s): 9025 Problem Description ...

qq_43813140的博客 345

深度学习+遥感:2025最新土地利用分类资源大全(数据集/论文/代码)

近年来,深度学习在遥感影像土地利用分类领域取得了突破性进展,从传统的农田、森林识别,到复杂的城市功能区划分,AI正在重新定义我们对地表覆盖的认知。无论是科研还是工程应用,高质量数据集、前沿算法和开源工具都是成功的关键。本文精心整理了2024年最值得关注的土地利用分类资源,包括:✅ 10+个权威数据集(覆盖全球、多分辨率、多光谱/雷达)✅ 15+篇顶会论文(CNN/Transformer/自监督学习等SOTA方法)✅ 6大开源工具箱(PyTorch/Keras实现,即拿即用)

hanfeng5268的博客 1312

hdu1506 Largest Rectangle in a Histogram

Problem 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, ...

baizhen6460的博客 225

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

hdu 1506 Largest Rectangle in a Histogram [好题]

这道题目看似很容易,找到比当前边i长的边且位于整个数组的最左边,存储在l[i],同理比当前边长且位于最右边的存储在r[i],于是我照做了,果断TL。。。所以需要优化,这道题目有点像并查集,如果当前边i比左边的边i-1短,那么就可以把左边边的l[i-1]赋给它,其实就是这样一个思路。学到了!这题真棒! 题目链接:https://vjudge.net/problem/HDU-1506 #inclu

算法虐我千百遍 446

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

HDU 1506 Largest Rectangle in a Histogram(DP)

可以发现 当第i-1个比第i个高的时候 比第i-1个高的所有也一定比第i个高 于是可以用到动态规划的思想 令left[i]表示包括i在内比i高的连续序列中最左边一个的编号 right[i]为最右边一个的编号 那么有 当h[left[i]-1]>=h[i]]时 left[i]=left[left[i]-1] 从前往后可以递推出left[i] 同理 当h[right[i]+1]>=h[i]]时 right[i]=right[right[i]+1] 从后往前可递推

Good morning,good afternoon and good night 1842

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

HDU 1506 Largest Rectangle in a Histogram(笛卡尔树)

题目传送门 解题思路: 来来来,笛卡尔树了解一下 代码1:(非要用结构体版) #include<bits/stdc++.h> using namespace std; #define ll long long #define for1(i,a,b) for (int i=a;i<=b;i++) #define for0(i,a,b) for (int i=a;i&l...

shadiao.的博客 280

HDU-1506.Largest Rectangle in a Histogram

地址:http://acm.hdu.edu.cn/showproblem.php?pid=1506 思路:并查集 || 单调栈 思路一、并查集:首先对数组以b[]={值,下标}结构按照从小到大排序,然后从大的开始处理,对于b[i]={val,id}, 比较其id位置左右相邻的值是否大于等于val,若大于等于则将其合并成一个集合,同时记录其集合中元素的个数s,那么当前元素的最大值为 val*s,res取所有元素的最大值即可。 思路二、单调栈:遍历数组,维护单调递增栈,对于当前元素x,其左边元素x0,当x0&.

随风而行的博客 298

HDU1506 Largest Rectangle in a Histogram

单调栈

a free man 593

Largest Rectangle in a Histogram HDU - 1506

题目描述】: 地面上从左到右并排紧挨着摆放多个矩形,已知这此矩形的底边宽度都为1,高度不完全相等。求在这些矩形包括的范围内能得到的面积最大的矩形,打印出该面积。所求矩形可以横跨多个矩形,但不能超出原有矩形所确定的范围。 如 n = 7, 序列为2 1 4 5 1 3 3 最大面积:8 【输入描述】: 输入有多组数据,每组数据一行: 第一个数N,表示矩形个数 后面跟N个正整数,第i个正整数hi表示...

peng1418975997的博客 224

HDU 1506 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 example, the figure on the left shows ...

~ 381

HDU 1506:Largest Rectangle in a Histogram

点击打开题目链接题目给出一系列宽度为1,高度不定的矩形,希望求出这篇区域中的一个最大矩形的面积。如果数据比较小,可以用最大子矩阵写,把没有矩形的地方方格值是0,有矩形的地方方格值是1。然后求个最大子矩阵。但是题目n很大,矩形高度更大。则考虑模拟。对于一个矩形,维护两个量,其左侧大于等于它高度的最远的一个矩形的位置记为l[i].其右侧大于等于它高度的最远的一个矩形的位置记为r[i],则他是l[i]~...

温姑娘的博客 282

Largest Rectangle in a Histogram(HDU-1506)

Problem 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 fig...

Alex_McAvoy的博客 419
上一篇: HDU 1003 Max Sum
下一篇: CCF CSP 201312 3.最大的矩形
Crossing over
博客等级 码龄10年 6粉丝 113原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值