<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,也能够用单调队列。

首先从左往右...

单调队列

原文地址:单调队列作者:良弓藏 keyword 队列,合并果子,窗户,广告印刷。最长XX子序列,志愿者选拔,动态规划,烽火传递 正文 单调队列,望文生义,就是指队列中的元素是单调的。如:{a1,a2,a...

广告印刷

【题目描写叙述】 近期。afy决定给TOJ印刷广告。广告牌是刷在城市的建筑物上的,城市里有紧靠着的N个建筑。afy决定在上面找一块尽可能大的矩形放置广告牌。我们如果每一个建筑物都有一个高度。从左到右给出每...

hdu 3530 单调队列水题

单调队列水题

uva 1169 - Robotruck(dp+单调队列)

题目链接:uva 1169 - Robotruck 题目大意:给出W和n。W表示机器人的限载重量,

NKOJ 2150 广告印刷 单调队列

【单调队列】广告印刷 Time Limit:10000MS  Memory Limit:65536K Total Submit:296 Accepted:108  Case Time Limit:10...

Uva 10305 - Ordering Tasks 拓扑排序基础水题 队列和dfs实现

今天刚学的拓扑排序。大概搞懂后发现这题是赤裸裸的水题。 于是按自己想法敲了一遍,用queue做的,也就是Kahn算法,复杂度o(V+E),调完交上去,WA了。

。。 于是

Light OJ 1084 线段树+dp or(单调队列+dp) 水题

2B错误,线段树开了2倍空间。 检查到死。改成4倍空间直接AC。太伤了。线段树太弱了。

线段树: #include #include #include using namespace std...

  • c3568
  • c3568
  • 2013-06-12 18:03
  • 1072

uva 1427 - Parade(dp+单调队列)

题目链接:uva 1427 - Parade <span st

单调队列之广告印刷问题

问题:有n幢建筑,其高度分别为H1,...,Hn,其宽度为1。且这些建筑紧靠在一起,当前须要在这些建筑上刷一个很大的矩形广告,求矩形广告的最大值。   先翻译成数学题,给定n个正数的序列。定义区...
  • wdq347
  • wdq347
  • 2013-06-29 17:04
  • 1289
  • 微博
    微信
    QQ
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多仅仅同意输入30个字)

posted @ 2017-08-12 08:10  wzjhoutai  阅读(207)  评论(0编辑  收藏  举报