<html>
【问题描写叙述】
近期,afy决定给TOJ印刷广告,广告牌是刷在城市的建筑物上的。城市里有紧靠着的N个建筑。
afy决定在上面找一块尽可能大的矩形放置广告牌。我们如果每一个建筑物都有一个高度。
从左到右给出每一个建筑物的高度H1,H2…HN,且0<Hi<=1,000,000,000,而且我们如果每一个建筑物的宽度均为1。
要求输出广告牌的最大面积。
输入文件 ad.in 中的第一行是一个数n (n<= 400,000)
第二行是n个数,分别表示每一个建筑物高度H1,H2…HN,且0<Hi<=1,000,000,000。
【输出文件】
输出文件 ad.out 中一共同拥有一行,表示广告牌的最大面积。
【输入例子】
6
5 8 4 4 8 4
【输出例子】
24
#include <iostream> #include <cstdio> #include <algorithm> #include <cstring> using namespace std; #define maxn 400000 + 10 int L[maxn], R[maxn]; int pos[maxn]; int a[maxn]; int n; void get_left() { int head = 1, tail = 0; for(int i = 1; i <= n; i++) { while(head <= tail && a[pos[tail]] >= a[i]) tail--; L[i] = i - pos[tail] - 1; pos[++tail] = i; } } void get_right() { int head = 1, tail = 0; pos[tail] = n + 1; for(int i = n; i >= 1; i--) { while(head <= tail && a[pos[tail]] >= a[i]) tail--; R[i] = pos[tail] - i - 1; pos[++tail] = i; } } int main() { while(~scanf("%d", &n)) { memset(L, 0, sizeof L); memset(R, 0, sizeof R); for(int i = 1; i <= n; i++) scanf("%d", a + i); get_left(); get_right(); long long ans = -1; for(int i = 1; i <= n; i++) ans = max(ans, ((long long)L[i] + R[i] + 1) * a[i]); printf("%I64d\n", ans); } return 0; } /* 6 5 8 4 4 8 4 */
版权声明:本文为博主原创文章,未经博主同意不得转载。
举报
- 本文已收录于下面专栏:
相关文章推荐
-
NKOJ 2150 【单调队列】广告印刷
输出用cout,不然用lld和I64d都会wa。对于每个建筑物,要知道往左到哪一个建筑第一个高度比它低,知道往右走哪一个建筑物第一个高度比它低。 能够用dp,也能够用单调队列。
首先从左往右...
- yskyskyer123
- 2016-04-12 11:28
- 460
-
单调队列
原文地址:单调队列作者:良弓藏 keyword 队列,合并果子,窗户,广告印刷。最长XX子序列,志愿者选拔,动态规划,烽火传递 正文 单调队列,望文生义,就是指队列中的元素是单调的。如:{a1,a2,a...- jiqiujia
- 2014-01-06 16:30
- 363
-
广告印刷
【题目描写叙述】 近期。afy决定给TOJ印刷广告。广告牌是刷在城市的建筑物上的,城市里有紧靠着的N个建筑。afy决定在上面找一块尽可能大的矩形放置广告牌。我们如果每一个建筑物都有一个高度。从左到右给出每...- qq_31640513
- 2017-02-05 18:43
- 184
-
hdu 3530 单调队列水题
单调队列水题- zxf654073270
- 2015-01-14 18:24
- 304
-
uva 1169 - Robotruck(dp+单调队列)
题目链接:uva 1169 - Robotruck 题目大意:给出W和n。W表示机器人的限载重量,- 阿尔萨斯
- 2014-02-19 15:49
- 73
-
NKOJ 2150 广告印刷 单调队列
【单调队列】广告印刷 Time Limit:10000MS Memory Limit:65536K Total Submit:296 Accepted:108 Case Time Limit:10...- zp___waj
- 2016-06-15 06:56
- 458
-
Uva 10305 - Ordering Tasks 拓扑排序基础水题 队列和dfs实现
今天刚学的拓扑排序。大概搞懂后发现这题是赤裸裸的水题。 于是按自己想法敲了一遍,用queue做的,也就是Kahn算法,复杂度o(V+E),调完交上去,WA了。。。 于是
- runfeel
- 2013-07-12 00:35
- 417
-
Light OJ 1084 线段树+dp or(单调队列+dp) 水题
2B错误,线段树开了2倍空间。 检查到死。改成4倍空间直接AC。太伤了。线段树太弱了。线段树: #include #include #include using namespace std...
- c3568
- 2013-06-12 18:03
- 1072
-
uva 1427 - Parade(dp+单调队列)
题目链接:uva 1427 - Parade <span st- 阿尔萨斯
- 2014-02-26 13:15
- 84
-
单调队列之广告印刷问题
问题:有n幢建筑,其高度分别为H1,...,Hn,其宽度为1。且这些建筑紧靠在一起,当前须要在这些建筑上刷一个很大的矩形广告,求矩形广告的最大值。 先翻译成数学题,给定n个正数的序列。定义区...- wdq347
- 2013-06-29 17:04
- 1289
收藏助手
不良信息举报
0条评论