• 2024-03-23P4198 楼房重建
    P4198楼房重建求从\((0,0)\)往上看能看到多少栋没被挡住的楼房,带修改。对于带修改的题目,我们需要快速维护,就需要用到数据结构。这时候通过直觉可以想到,问题是可以分为子问题然后合并得到的,所以我们考虑线段树。观察到能被看到的楼房,从左到右斜率递增,即我们需要维护斜率递增
  • 2024-02-25洛谷 P4198 楼房重建(线段树上二分)
    传送门解题思路动态维护区间里面单调递增斜率的长度需要维护两个信息:上述长度,和区间最大值(合并时需要)难点在于两个子区间的合并。左区间的楼房一定都能看见(没有遮挡),所以要在右区间二分,找到左面最大值lmax在右区间的位置,然后进行合并。复杂度两个log。AC代码#include<ios
  • 2024-02-22P4198 楼房重建
    P4198楼房重建一道优秀线段树题题目大意,有1至n个位置,每个位置有一个楼房,初始高度为0,高度为\(h_i\)的楼房可以抽象成端点为\((i,0),(i,h_i)\)的线段你站在\((0,0)\),看到一栋楼的前提是\((0,0)\)与\((i,h_i)\)的连线不与任何线段相交每次修改一栋楼的高度,问你能看到的楼房有多
  • 2023-10-26P4198 楼房重建
    P4198楼房重建(RE:题解再改造!!)码#include<bits/stdc++.h>#defineMAXN2000010usingnamespacestd;intn,m;intx[MAXN],y[MAXN],ans[MAXN];doubleK[MAXN];intquery(intp,intl,intr,doublemaxn){if(K[p]<=maxn)return0;if(l==r)returnK[p]>maxn;
  • 2023-09-03P4198 楼房重建题解
    传送门一眼数据结构。考虑线段树,记录该区间能看到最多的建筑数量\(ans_{wz}\)以及看到区间中最大的斜率(或者说,该区间内最后看到的建筑)\(xl_{wz}\)。很明显,假如我现在的修改操作是\((x,y)\),那么会改变\(\log_n\)个节点,即包含\(x\)的节点,考虑如何修改他们的\(ans\)和\(
  • 2023-05-02P4198 楼房重建 题解
    P4198楼房重建题解线段树二分思路考虑在线段树内维护二信息:区间斜率最大值\(mx\)区间最大斜率上升序列长度\(len\)答案即为根节点的\(len\)。考虑转移信息二:蓝色部分代表左区间的上升序列,红色是右区间的,绿色折线就是当前区间的上升序列。
  • 2023-01-16P4198 楼房重建
    题目链接P4198楼房重建分析1.对于每栋楼,计算它顶点(x,y)与原点(0,0)连线的斜率((double)y/x)那么能看到的楼则为斜率大的楼。2.第一栋楼一定能被看见,那么问题就转化成了求
  • 2023-01-11P4198 楼房重建题解
    一道经典的线段树二分应用题目转化:把每个点换成斜率,此时发现,一个点能够被看见,当且仅当他本身就是前缀最大值用线段树维护单点修改,区间询问前缀最大值数量解题思路:要
  • 2022-10-29【P4198】楼房重建(线段树维护前缀最值)
    线段树维护前缀最值相关的模板题。关键思想在于合并,\([l,mid]\)的前缀最值仍然是\([l,r]\)的前缀最值,而\((mid,r]\)中只有\(\geqmx_l\)的前缀最值才是\([l,r]\)