zoukankan      html  css  js  c++  java
  • 《广告印刷》题解

    最近,afy决定给TOJ印刷广告,广告牌是刷在城市的建筑物上的,城市里有紧靠着的N个建筑。afy决定在上面找一块尽可能大的矩形放置广告牌。我们假设每个建筑物都有一个高度,从左到右给出每个建筑物的高度H1,H2…HN,且 \(1\leq Hi\leq1,000,000,000\) ,并且我们假设每个建筑物的宽度均为1。要求输出广告牌的最大面积。
    对于这道题,一开始我有个贪心思路,不过好像假了
    错误思路: 维护一个当前最大面积的区间,
    每次向右插入一个点,如果左端点的贡献为负数,就将左端点删去,
    错误:左端点对当前区间的贡献为负数,不一定对之后区间贡献为负数
    卡掉错误做法样例:

    5
    13 34 16 25 30 
    

    首先\(a[2] > 2*a[1]\),将13弹出
    但是 \(13\) 对区间 \([2,4]\)\(13-4*(16-13) = 1\)的贡献,而错误做法中,弹出后就不会补上,所以错误
    正确做法:对每个建筑物维护一个区间:以以该建筑物为最小值的最大区间,不难发现这个这个区间就是一个建筑物的最大面积贡献
    这个东西可以单调队列 \(O(n)\) 维护

  • 相关阅读:
    异步I/O
    path路径操作
    Buffer类
    ES6常用语法
    GitHub上的基本功能与概念
    git的基本命令
    HTML中的表单
    PyCharm的安装以及破解
    HTML中的表格
    HTML中的列表
  • 原文地址:https://www.cnblogs.com/cdsidi/p/15559385.html
Copyright © 2011-2022 走看看