HDU1506(最大子矩阵)

算法合集 | 神奇的笛卡尔树 - HDU 1506 原文地址:https://cs.v8cloud.cn/article.html?blog_id=225         笛卡尔树是一个很有意思的树形结构,因为它同时满足两个性质,从key(key就是索引位置,如下图中9的key为1,3的key为2......)来看,满足二叉搜索树的特性,从value来看,满足堆的性质。           重点参考下图,图片来自维基百科,还算是能够比较形象的... 阅读详情

这里写图片描述

题意:

给定n个长方形,这n个长方形的底边都在一条直线上,然后输入n个长方形的高,问在这组图像中最大长方形的面积。

解题思路:

因为每个长方形的底边长都是1,所以可以用数组的下标表示每一个长方形,我们所需做的就是求出此长方形能向左向右延伸的最大长度LEN,然后LEN*H即为面积。因为输入的长方形多达一亿个,所以不能一个个从头到尾判断。
L[i]代表第i个长方形向左延伸的最大下标,R[i]表示第i个长方形向右延伸的最大下标。
LEN = R[i] - L[i]+1.
状态转移方程:
if(h[i-1] >= h[i]) L[i] = L[i-1];
if(h[i+1] >= h[i]) R[i] = R[i-1];

#include <set>
#include <numeric>
#include <cmath>
#include <queue>
#include <stack>
#include <vector>
#include <string>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <iostream>
#include <algorithm>
#include <cctype>
#include <string>
#include <sstream>
#include <map>
#include <functional>

using namespace std;

typedef long long LL;
typedef unsigned long long ULL;
#define REP(idx1,num1) for(int idx1=0;idx1<(num1);idx1++)
#define pb push_back
#define empb emplace_back
#define mp make_pair
#define mem(s) memset(s,0,sizeof(s));
const double EPS = 1e-6;
const int maxn = 100000+10; 
//ULL d[maxn];
ULL a[maxn];
ULL l[maxn];
ULL r[maxn];
int main()
{
    std::ios::sync_with_stdio(false);
    int n;
    while(cin >> n && n)
    {
      //  d[0] = 0;
        //dp
        for(int i = 1; i <= n; ++i)
        {
            cin >> a[i];
            l[i] = i;r[i] = i;//初始化
        }
        for(int i = 1; i <= n; ++i)
        {
            ULL t = i;
            while(t > 1 && a[i] <= a[t-1])
                t = l[t-1];
            l[i] = t;
        }
        for(int i = n; i >= 1; --i)
        {
            ULL t = i;
            while(t < n && a[i] <= a[t+1])
                t = r[t+1];
            r[i] = t;
        }
        //dp
        ULL max_d = 0;
        for(int i = 1; i <= n; ++i)
        {
            max_d = max(max_d,a[i]*(r[i] - l[i] + 1));
        }
        cout << max_d << endl;
    }
    return 0;
}
Mac安装Weblogic教程 1.Weblogic的下载 这次安装的是最新版本12 官网下载地址: http://www.oracle.com/technetwork/middleware/weblogic/downloads/index.html 下载需要登录账号,如没有账号要注册一个 下载后的文件如下图,其中fmw_12.2.1.3.0_wls_quick.jar文件就是安装包了,注意现在不要对它进行解压 2.安装前的确... 阅读详情

相关推荐

科研绘图(二):R 语言实现小鼠脑图谱 3D 渲染,附完整代码与数据获取指南

在生物医学科研中,脑区的 3D 可视化是呈现实验结果、解析脑结构功能的重要手段。R 语言凭借rgl和Rvcg等工具包,可高效实现小鼠全脑及特定脑区(如 CA1 区)的立体渲染,且代码可复用性强。本文将从环境搭建、数据准备、代码实现到结果导出,手把手带你完成小鼠脑图谱 3D 绘图,小白也能快速上手!

good_rrrrr的博客 2023

HDU 1506(动态规划)

分析1:对于每个单位矩阵,我们先求出连续比它高的最左边的下标假设为l,然后求出比它高的最右边的下标假设为r,然后矩阵的面积就是(r-l+1)*1;我们从左到 右扫一遍,求出每个点的l保存在l[]数组里,然后从右到左扫一遍,求出每个点的r保存在r[]数组里,最后可以求出最大的矩阵了。 分析2:我们要求最大矩形面积,那么我们应该求每个矩形向两边延伸的最大长度,最坏情况为0(n),必然T

nucshiyilang的博客 389

GD32F303 ADC+DMA实战:用硬件过采样搞定多通道数据采集(附完整代码)

本文详细介绍了GD32F303系列MCU通过ADC+DMA结合硬件过采样技术实现多通道数据采集的实战方案。从硬件设计要点到软件配置全解析,包括时钟树配置、ADC模块初始化和DMA传输设置,提供了完整的代码示例和优化技巧,帮助工程师构建高精度、低功耗的数据采集系统。

weixin_30466039的博客 318

HDU 1506(单调栈)

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

博学 笃志 切问 近思 1281

非线性动力学_用MatCont分析非线性动力学方程组(一)

写在前面:笔者打算写两到三篇系列文章介绍MatCont,此为第一篇《用MatCont分析非线性动力学方程组(一)》。MatCont是一个基于Matlab而开发的免费工具包,专门用来做非线性动力学模型分叉、向量场、周期性等分析,符号(连续性)运算和数值(离散性)运算均适用。该工具的开发及研究项目由比利时Ghent大学的Willy Govaerts教授、荷兰Utrecht大学的Yuri Kuznets...

weixin_39700215的博客 2766

西门子TM PosInput1模块SSI编码器配置与速度测量实战

本文详细介绍了西门子TM PosInput1模块配置SSI绝对值编码器的实战步骤,涵盖硬件组态、工艺对象配置、编程实现与速度测量优化。重点解析了高分辨率编码器的数值处理技巧和常见调试问题,帮助工程师快速实现高精度位置与速度检测,提升自动化项目效率。

emacs5lisp的博客 340

HDU1506 Largest Rectangle in a Histogram (单调栈)

题目链接: Largest Rectangle in a Histogram 大致题意 给定一个宽度为nnn的图形, 由nnn个宽度为1, 高度为hih_ihi​的矩形组成. 要求计算出最大矩形的面积. 解题思路 思维 首先我们最终选取出的大矩形高度一定为某个hih_ihi​. 我们考虑到对于完全包含第iii个小矩形而言的答案, 相当于需要在iii左侧找到小于hih_ihi​的点, 则记录iii位置可以向左延伸lil_ili​, 右侧同理记录出rir_iri​. 这样答案为res=max((ri−li−1)

Fau的博客 232

计算机网络基础:认识网络硬件与传输介质

计算机网络基础:认识网络硬件与传输介质,在计算机网络的庞大体系中,网络硬件与传输介质犹如坚实的骨架与脉络,支撑并承载着信息的流动。从家庭中的小型网络,到企业复杂的办公网络,再到覆盖全球的互联网,各类网络硬件设备各司其职,不同的传输介质发挥着独特的传输作用。它们相互协作,使得数据能够在不同设备之间快速、准确地传输,为人们的日常沟通、工作办公、娱乐休闲等活动提供了基础保障。

不踩坑,不知道坑有多深;不总结,踩过的坑白踩。 3万+

HDU1506_Largest Rectangle in a Histogram

题目大意:给你一个直方图,告诉你各个条形矩形的高度,求基线对齐构成的矩形中面积 最大的矩形的面积对于每一个矩形。面积 = h[i]*(j-k+1),其中j,k是左右边界,h[i]是矩形 的高。并且对于j <= x <= k,h[i] <= h[x]。 本题中,找到左右边界j,k是关键。 利用动态规划的方法,对于位置i,如果左边条形矩形的高度大于它本身,那么左边的左边 界一定也满足位置i的左边界。同理如果右边条形矩形的高度大于它本身,那么右边的右边 界也一定满足位置i的右边界。迭代循环下去。直到找到i的左右边

程序员充电站(itcharge) 3347

当AI学会写“自传”:OpenClaw 的 SOUL.md 如何把配置文件变成一颗会变形的心

SOUL.md。

步子哥的博客 1309

【LAMMPS学习】五、LAMMPS命令(8) Pair_style 势

所有LAMMPS pair_style命令如下表所示。有些样式有加速版本。这由括号中的附加字母表示:g = GPU, i = INTEL, k = KOKKOS, o = OPENMP, t = OPT。

荷塘阅色 3016

HDU 1506 (DP求最大子矩阵)

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

HHH的专栏 592

ubuntu 安装node和npm

在ubuntu中经常需要用到node ,npm,因为npm基本会和node同时安装,所以只需要安装node即可。可以使用 nvm(Node Version Manager)来管理你的 Node.js 版本。

风吹落叶的博客 2291

HDU 2870 最大子矩阵,联系1505, 1506

题目意思:w  x  y  z  可以转化,求最大子矩阵。 思路:枚举后转换为 hdu 1505 hdu 1506 的情况。 可以转化为a的有:w,y, z 可以转化为b的有:w,x, z 可以转换为c的有:x, y, z 所以 a, w,  y, z一组 b, w,  x, z一组 c, x,  y,  z一组 分别dp #include #include using

vsooda的专栏 1002

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

【DP求最大子矩阵面积】hdu 1506

求最大子矩阵面积其实就是求每个数左边>=a[i]的下标,右边>=a[i]的下标,然后就会求出面积了! #include #include #include #include #include #include #include #include #include

leolin_的专栏 1090

efm32 入门.pdf

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

hdu 1505 1506 2870 2830 最大子矩阵面积

题目链接 1505  http://acm.hdu.edu.cn/showproblem.php?pid=1505 1506  http://acm.hdu.edu.cn/showproblem.php?pid=1506 2807  http://acm.hdu.edu.cn/showproblem.php?pid=2870 2830  http://acm.hdu.edu.cn/show...

甦萌的博客 229

IEM模型,地表粗糙度模拟

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

hdu 1506 最大子矩阵面积

//写动态规划的题目 要把主要问题提炼出来 这里的问题就是求area=(j-k+1)*a[i] 如果找到j k是解决这个题目的关键 这里暴力求肯定是要超时的 这里用dp来优化#include<stdio.h> #include<string.h> __int64 a[100005],dp[100005],l[100005],r[100005]; int m...

diaoqi6581的博客 157

hdu 1505 /hdu 1506(最大子矩阵)

题意都是求最大子矩阵和。 自己用O(n^3)的算法,直接给我无情的TLE (T..> 随后看到了这个位置迭代算法。 left[i] 表示在第i号元素的左边从left[i]至i中, elem[j] >= elem[i] ( left[i] 同理可得,用right[i]表示在

做自己想做的,即使是错的 1241

HDU 1506 DP 最大完全子矩阵

记录每个 #include "stdio.h" int le[100010],ri[100010]; __int64 ans,x,a[100010]; int main() { int n,i; while (scanf("%d",&n)!=EOF) { if (n==0) break; for (i=1;i<=n;i++)

610

hdu1506(dp求最大子矩阵)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1506 分析: 对于每个单位矩阵,我们先求出连续比它高的最左边的下标假设为l,然后求出比它高的最右边的下标假设为r,然后矩阵的面积就是(r-l+1)*1; 我们从左到右扫一遍,求出每个点的l保存在l[]数组里,然后从右到左扫一遍,求出每个点的r保存在r[]数组里,最后可以求出最大的矩阵...

weixin_33853827的博客 106

hdu1506求最大子矩阵

题目链接:点击打开链接 看的别人的代码写的:点击打开链接 #include #include #define LL long long using namespace std; const int maxn=1e6+10; LL a[maxn],l[maxn],r[maxn]; int main() { LL n,Max,i,t; while(~scanf("%lld",&n

Alberttttt的博客 303

HDU 1506 dp求最大子矩阵 *

New~ 欢迎参加——计算机学院大学生程序设计竞赛(新生为主) Largest Rectangle in a Histogram Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 14692    Accepted Submi

became_a_wolf的专栏 429

hdu 2870(dp求最大子矩阵)

题意:让你求的是由同一字母组成的最大子矩阵,w可以变成a或者b,x可以变成b或者c,y可以变成a或者c,z可以变成a或者b或者c。 分析:这是hdu 1506、hdu 1505的加强版,具体的分析看我的博客:http://www.cnblogs.com/jiangjing/p/3221423.html 代码实现: #include<stdio.h> #include<...

weixin_30390075的博客 87

hdu 1506 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, the figur

HJ 722

hdu 1506 求最大子矩阵 简单DP 迭代法

L[i]表示区间[L[i],i  ]内的x均有a[x]>=a[i],且L[i]取最小值。 R[i]表示区间[i, R[i] ]内的x均有a[x]>=a[i],且R[i]取最大值。 就是枚举高度最低的矩形,形成的矩形高度为 该矩形高度,之前预处理 找到最左边界,和右边界。 #include #include #include #include #

便纵有千种风情 535

hdu 1506(dp求最大子矩阵)

点击打开链接面积=长*宽dp递推

为AC千千万万遍 349
上一篇: HDU1213基础并查集
下一篇: Uva1395 Slim Span(最小生成树)
Link_Ray
博客等级 码龄9年 44粉丝 156原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值