[BZOJ2957]楼房重建

标签: bzoj
11人阅读 评论(0) 收藏 举报
分类:

貌似已经很久没有写blog了的说……一直在用为知笔记都快忘记博客了emm
这次先拿这样一道水题来写一下吧,这个思想好像很常用,最近这几天已经遇到很多次了。

题意

一个长度为n的序列wi表示楼房高度,初始都是0,有m个操作,每次单点修改一个位置的高度,可以变成正的也可以变成负的,问有多少个位置能够在每次修改后被看到(也就是说,其最高点与原点连线上没有其他楼房)。
0n,m100000

分析

题意非常明显,考虑维护每个高度对于原点的一个斜率ki=wii,这里要求的就是问有多少个ki大于前面所有数。这相当于就是在维护一个上升的单调序列,我们可以考虑用线段树来维护这个。
考虑每次直接查询整个区间,那么我们考虑对于某一个区间,我们可以记下这个区间只算自己内部应该有的答案,那么下面考虑一下怎么区间合并。考虑当前区间称为[l,r],那么左边的区间[l,m]的答案肯定是可以直接算进来的,而右边的区间的答案则需要考虑加入左边区间的限制的情况下的新的答案。首先显然如果右区间斜率最大值小于等于左边最大值,那么右区间肯定没有贡献。
如果大于最大值,我们考虑这时怎么做。我们需要在右区间进一步分出其两个子区间来计算,同样的思想,我们只需要考虑一下左子区间会不会将这个左区间的影响“屏蔽”即可。如果左子区间最大值小于等于左区间最大值,就相当于左子区间整个没用了,我们递归处理右子区间;反之,说明左子区间里面存在至少一个点(例如那个最大值),会将左区间的影响全部“屏蔽”,那么递归处理左子区间即可。于是右区间的答案在后一种情况下就是整个区间的答案减去左子区间,因为单纯右子区间的答案并没有考虑左子区间的影响。
实际实现中,我们可以考虑写成“该节点对于某个值在最前面的答案”的查询。

查看评论

建站+SEO(基础+高级)在线网课

简介 本系列课程从SEO如何月入过万到如何认识搜索引擎、搜索引擎工作原理、SEO常用术语解释、影响页面排名因素分析、符合最快排名的关键词选择等系统讲述了网站优化方法,通过本课程学习,让你从零基础到精通!
  • 2017年06月01日 11:54

BZOJ2957 楼房重建(线段树)

【题解】 题目描述有误,一栋楼房可见,应满足其最高点到(0,0)的连线不与其他楼房相交  这个条件可以等价为:它的斜率比之前的任何一个都大(相等也不行) 因此,只需O(logN)修改、O(log...
  • cjk_cjk
  • cjk_cjk
  • 2015-06-21 15:17:21
  • 1078

【bzoj2957】【楼房重建】【线段树+dp】

Description   小A的楼房外有一大片施工工地,工地上有N栋待建的楼房。每天,这片工地上的房子拆了又建、建了又拆。他经常无聊地看着窗外发呆,数自己能够看到多少栋房子。   为了简化问...
  • sunshinezff
  • sunshinezff
  • 2015-09-23 19:58:12
  • 1571

bzoj2957 楼房重建

分块/线段树
  • AaronGZK
  • AaronGZK
  • 2016-05-29 00:16:09
  • 3649

bzoj2957: 楼房重建

容易想到把楼房高度转化为斜率,然后就是求x1,x2,x3...使x1 #include #include #define N 100005 using namespace std; int n,m,...
  • Miao_zc
  • Miao_zc
  • 2016-05-26 15:49:09
  • 281

BZOJ2957: 楼房重建 题解

线段树的高级操作首先肯定将每个点化成斜率来算我们考虑在线段树的每个节点记录一个sum[k],表示如果当前只有这个节点范围内的那些楼房,完全不考虑这个区间之外的楼房,能看到多少个楼房那么显然在单点更新的...
  • IcePrincess_1968
  • IcePrincess_1968
  • 2018-03-15 22:54:10
  • 18

【线段树】BZOJ2957 楼房重建

题面在这里通过观察可以发现:能看到的楼房中,最高点与原点连线的斜率一定是递增的所以就是求最长上升序列的长度用线段树维护即可,与BZOJ2770类似示例程序:...
  • linkfqy
  • linkfqy
  • 2017-09-02 14:21:38
  • 505

BZOJ2957 楼房重建(线段树)

题目: 2957: 楼房重建 Time Limit: 10 Sec  Memory Limit: 256 MB Submit: 2259  Solved: 1069 [Submit][...
  • riba2534
  • riba2534
  • 2017-08-08 10:58:52
  • 134

[题解]bzoj2957 楼房重建

Description  小A的楼房外有一大片施工工地,工地上有N栋待建的楼房。每天,这片工地上的房子拆了又建、建了又拆。他经常无聊地看着窗外发呆,数自己能够看到多少栋房子。   为了简化问题,我们...
  • Saramanda
  • Saramanda
  • 2017-07-13 12:56:24
  • 170

[BZOJ2957]楼房重建(线段树)

明天就要走啦!今天ATP不用上晚自习啦!
  • FromATP
  • FromATP
  • 2016-11-17 09:38:49
  • 221
    个人资料
    持之以恒
    等级:
    访问量: 6万+
    积分: 1107
    排名: 4万+
    最新评论