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;
}
手把手教你解决Realsense D455在ROS下IMU数据不输出的问题(附固件降级指南) 本文详细解析了Realsense D455在ROS环境下IMU数据不输出的问题,提供了固件降级和ROS配置的完整解决方案。通过版本兼容性分析和实战操作指南,帮助开发者快速恢复IMU数据流,优化机器人开发体验。 阅读详情

相关推荐

【opencv3 学习记录】第二章 读取显示保存视频

一:捕获视频函数 1.函数:cv2.VideoCapture(参数) 2.参数说明: (1)开启摄像头:参数一般为0,你可以通过设置成 1 或 者其他的来选择别的摄像头。 (2)从文件夹中获取视频:参数为字符串形式的文件路径 3.示例: cap = cv2.VideoCapture(0) #cap:存放参数 二:读取视频函数 1.函数:cap.read() 2.函数说明: (1)cap.read 中cap与捕获视频函数存放函数一致,可以自己命名.括号一般不用填写 (2)ret,f

m0_64448543的博客 3272

HDU 1506(动态规划)

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

nucshiyilang的博客 389

matlab相机标定_实战 | 相机标定

点击“计算机视觉life”关注,置顶更快接收消息!本文阅读时间约5分钟什么是相机标定?我们为什么需要相机标定?相机标定就是确定相机内参和外参的过程,其结果精度会直接影响视觉系统后续工作的准确性。坐标系相机标定涉及到了四大坐标系,分别为:像素坐标系图像物理坐标系相机坐标系世界坐标系为了进行相机标定,必须已知世界坐标系中足够多的三维空间点坐标,找到这些空间点在图像中投影点的二维图像坐标,并建...

weixin_39747334的博客 764

HDU 1506(单调栈)

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

博学 笃志 切问 近思 1281

保姆级教程:手把手教你从NASA Earthdata下载ASTER L2地表温度数据(附shp文件拖拽技巧)

本文提供了一份详细的NASA Earthdata平台ASTER L2地表温度数据下载教程,涵盖账号注册、数据筛选、shp文件拖拽技巧及质量检查等关键步骤。特别适合遥感领域初学者,帮助快速掌握高效获取ASTER L2T数据的方法,适用于城市热岛效应和农业监测等研究。

weixin_30736301的博客 470

PyTorch实战:3D U-Net医学图像分割从零搭建(附完整代码)

本文详细介绍了如何使用PyTorch从零搭建3D U-Net模型进行医学图像分割,涵盖三维卷积实现、模块化架构设计、医学图像专属优化策略及完整训练流程。通过实战代码演示,帮助开发者掌握UNet-3D在CT、MRI等三维医学图像分割中的应用,提升肝脏肿瘤分割、肺结节检测等任务的准确性。

weixin_29061997的博客 329

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

STA 静态时序分析 第三章——标准单元库中的高级功耗建模与优化策略

本文深入探讨了STA静态时序分析中标准单元库的高级功耗建模与优化策略。详细解析了动态功耗和漏电功耗的精细建模技术,包括基于波形敏感的CCS模型和温度敏感的漏电模型,并介绍了多工艺角功耗建模及低功耗设计优化策略,为纳米级芯片设计提供关键能效解决方案。

weixin_29290863的博客 224

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

在SAP系统中创建物料 860000000000000082(物料描述为“8680月球广寒宫坦克车”)时,系统报出了一个错误

摘要:SAP系统创建物料"8680月球广寒宫坦克车"时出现"C+020"错误,提示评估区域C916未在物料分类账中设置为生产性。解决方案需进入"会计-控制-产品成本控制-实际成本核算"路径,将评估区域C916手动设置为生产性状态。该操作需由具备权限的系统管理员或FICO顾问执行,建议操作前进行数据备份或在测试环境验证。完成设置后即可重新创建物料。

金牌架构师 391

C#操作MySQL从入门到精通(1)——安装MySQL数据库

我们使用C#操作MySQL数据库第一步要做的就是安装MySQL数据库,本文就是详细讲解如何安装MySQL数据库。

qq_34059233的博客 963

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

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

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

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

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

leolin_的专栏 1090

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

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

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

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、付费专栏及课程。

余额充值