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)\) 维护

  • 相关阅读:
    Stl源码剖析读书笔记之Alloc细节
    Lua热更系统
    Linux C++线程池
    linux sort,uniq,cut,wc.
    (转)Linux grep
    用LogParser分析IIS请求压力
    (转)MySQL主从复制的常见拓扑、原理分析以及如何提高主从复制的效率总
    AIS相关资料
    python学习笔记
    (转)MySQL InnoDB修复笔记
  • 原文地址:https://www.cnblogs.com/cdsidi/p/15559385.html
Copyright © 2011-2022 走看看