【UOJ 48】最大矩形面积(修正版)

【题目描述】:

地面上从左到右并排紧挨着摆放多个矩形,已知这此矩形的底边宽度都为1,高度不完全相等。求在这些矩形包括的范围内能得到的面积最大的矩形,打印出该面积。所求矩形可以横跨多个矩形,但不能超出原有矩形所确定的范围。

如 n = 7, 序列为2 1 4 5 1 3 3

          _                       _           _ | |                   _ | |          | || |    _  _          |H||H|    _  _  _    | || |   | || |    _    |H||H|   | || | 
| | _ | || | _ | || |   | | _ |H||H| _ | || | 
|_||_||_||_||_||_||_|   |_||_||H||H||_||_||_| 

最大面积:8

【输入描述】:

输入有多组数据,每组数据一行:

第一个数N,表示矩形个数

后面跟N个正整数,第i个正整数hi表示第i个矩形的高度。

最后一行,以一个单独的0结束。

【输出描述】:

每组输入数据一行,一个数表示最大矩形面积。

【样例输入】:

7 2 1 4 5 1 3 3
4 1000 1000 1000 1000
0

【样例输出】:

8
4000

【时间限制、数据范围及描述】:

时间:1s 空间:64M

30 %: 1<=N<=100

60 %: 1<=N<=1,000

100%: 1<=N<=500,000,0<=hi<=1,000,000,000

 

题解:问题可简化为两个子问题,每找到一个点,查找左第一个比他大的,右边第一个比她大的。

(这里用单调栈即可)两坐标之差再乘上i的高度即可得出答案。

#include <iostream>
#include <cstdio>
#include <cstring>
#define MAX_N 500005
using namespace std;int main()
{int n;while(~scanf("%d",&n)&&n){int a[MAX_N];int l[MAX_N],r[MAX_N];for(int i=1;i<=n;i++)scanf("%d",&a[i]);l[0]=0,l[n+1]=0;for(int i=1;i<=n;i++){int k=i-1;if(a[i]<=a[k]){while(k>0&&a[i]<=a[k]) k=l[k]-1; }l[i]=k+1;}for(int i=n;i>=1;i--){int k=i+1;if(a[i]<=a[k]){while(k<n+1&&a[i]<=a[k]) k=r[k]+1;}r[i]=k-1;}long long maxn=-1;for(int i=1;i<=n;i++){long long s=(long long)(r[i]-l[i]+1)*a[i];if(s>maxn) maxn=s;}printf("%lld\n",maxn);}return 0;
}

 

转载于:https://www.cnblogs.com/wuhu-JJJ/p/11205744.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/482810.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

深度学习不可信?大脑建模先驱有话说

来源&#xff1a;ScienceAI编辑&#xff1a;萝卜皮在过去的 20 年里&#xff0c;深度学习通过一系列有用的商业应用主导了人工智能的研究和应用。但在耀眼的背后是一些根深蒂固的问题&#xff0c;威胁着技术的提升。例如&#xff0c;典型的深度学习程序无法在一项以上的任务上表…

python模块补充

collections模块 collections模块namedtupe方法。又称具名元组。 from collections import namedtuple point namedtuple(空间坐标, x y z) # x y z可以写成列表形式&#xff0c;元组等可迭代对象 res point(3, 4, 5) print(res) # 空间坐标(x3, y4, z5) print(poin…

《力学》课时二质点运动学(二)

视频链接 1.角位移/角速度/角加速度

ListObject 多条件去重

上一篇将到根据某一条件去重List<Object> 对象链表。本文章根据多条件去重List<Object>去重 1 private List<StaingMD0010> getSecondProductWork(List<StaingMD0010> list) {2 for (int i 0; i < list.size(); i) {3 for (int j 0; …

More than Moore的探索

来源&#xff1a;内容由半导体行业观察&#xff08;ID&#xff1a;icbank&#xff09;编译&#xff1a;porsche众所周知&#xff0c;现代电子学于1947年12月16日在新泽西州 Murray Hill的贝尔实验室诞生&#xff0c;在那里物理学家Walter Brattain 首次成功使用一种临时制作的半…

用scikit-learn学习主成分分析(PCA)

在主成分分析&#xff08;PCA&#xff09;原理总结中&#xff0c;我们对主成分分析(以下简称PCA)的原理做了总结&#xff0c;下面我们就总结下如何使用scikit-learn工具来进行PCA降维。 一、scikit-learn PCA类介绍 在scikit-learn中&#xff0c;与PCA相关的类都在sklearn.deco…

开始即结束,Meta元宇宙OS要黄?

来源&#xff1a;七月在线实验室出师未捷身先死&#xff0c;Meta元宇宙操作系统要凉凉了&#xff1f;团队解散&#xff0c;负责人跳槽&#xff01;副总裁亲自发推「辟谣」&#xff0c;但……Facebook进军元宇宙决心&#xff0c;如今要泡汤了&#xff1f;发布元宇宙产品不过瘾&a…

3.1_ 1_ 内存的基础知识

3.1_ 1_ 内存的基础知识 文章目录1.知识总览2.什么是内存&#xff0c;有什么作用进程的运行原理-指令逻辑地址vs物理地址从写程序到程序运行装入模块装入内存装入的三种方式--绝对装入装入的三种方式一静态重定位装入的三种方式- -动态重定位进程运行的基本原理链接的三种方式知…

为什么说黎曼猜想是最重要的数学猜想?

来源&#xff1a;卢老师网站: www.changhai.org作者: 卢昌海老师, 科学人黎曼猜想是一位名叫黎曼 (Bernhard Riemann) 的数学家提出的。黎曼是一位英年早逝的德国数学家&#xff0c; 出生于 1826 年&#xff0c; 去世于 1866 年&#xff0c; 享年还不到 40 岁。黎曼的一生虽然短…

【广搜】Keyboarding

题目描述 给定一个r行c列的在电视上的“虚拟键盘”&#xff0c;通过“上&#xff0c;下&#xff0c;左&#xff0c;右&#xff0c;选择”共5个控制键&#xff0c;你可以移动电视屏幕上的光标来打印文本。一开始&#xff0c;光标在键盘的左上角&#xff0c;每次按方向键&#xf…

3.1_ _2_ 内存管理的概念

知识总览 内存空间的分配和回收 内存空间的扩展 地址转换 内存保护 知识回顾

Yann LeCun:发现智能原理是AI的终极问题 | 独家对话

来源&#xff1a;智源社区对话整理&#xff1a;李梦佳 周致毅导读&#xff1a;在《科学之路&#xff1a;人&#xff0c;机器与未来》一书中&#xff0c;图灵奖得主&#xff0c;卷积网络之父杨立昆&#xff08;Yann LeCun&#xff09;提出&#xff0c;在科学史上&#xff0c;技术…

4.1.2电路交换、报文交换与分组交换

1.网络的掌中宝 2.为什么要进行数据交换 3.数据交换方式 3.1 电话交换 3.2报文交换 3.3分组交换 3.4 报文交换和分组交换 3.5三种数据交换比较总结

leetcode-187-重复的DNA序列

题目描述&#xff1a; 方法一&#xff1a; class Solution:def findRepeatedDnaSequences(self, s: str) -> List[str]:n 10d {}for i in range(len(s)-9):if s[i:i10] in d:d[s[i:i10]] Trueelse:d[s[i:i10]] Falsereturn [i for i in d if d[i]] 方法二&#xff1a; c…

机器人视觉三维成像技术全解析

来源&#xff1a;卢荣胜,史艳琼,胡海兵. 机器人视觉三维成像技术综述[J]链接&#xff1a;http://www.opticsjournal.net/Articles/Abstract/lop/57/4/040001.cshtml原题&#xff1a;机器人视觉三维成像技术综述摘要本文针对智能制造领域机器人视觉感知中的三维视觉成像技术进行…

4.1.3数据报与虚电路

4.1.3数据报与虚电路 文章目录4.1.3数据报与虚电路1.三种数据交换方式比较总结2.数据报方式&虚电路方式3.几种传输单元名词解析4.数据报5.虚电路数据报&虚电路 对比总结1.三种数据交换方式比较总结 2.数据报方式&虚电路方式 3.几种传输单元名词解析 4.数据报 5.虚电…

Java中的位运算符、移位运算

一.位运算 Java中有4个位运算&#xff0c;它们的运算规则如下&#xff1a; (1)按位与 &#xff08;&&#xff09; &#xff1a;两位全为1&#xff0c;结果为1&#xff0c;否则为0&#xff1b; (2)按位或 &#xff08;|&#xff09; &#xff1a;两位有一个为1&#xff…