03 2024 档案
摘要:CF208E Blood Cousins 线段树合并 考虑把询问离线,转化题意,也就是求 的 级祖先有多少个 级儿子,那么询问的答案就是 「 级祖先有多少个 级儿子数量 - 1」(减去自己)。 级祖先可以倍增找到。 我们可以维护根节
阅读全文
摘要:P4556 [Vani有约会] 雨天的尾巴 /【模板】线段树合并 在这题里面讲一下线段树合并。顾名思义就是把多个线段树合并成一个。 显然完全二叉线段树(也就是普通线段树)是无法更高效的合并的,只能把所有节点加起来建个新树。但是在动态开点线段树中,有时候一个树只有几条链,这时候我们就是可以使用线段树合
阅读全文
摘要:P8162 [JOI 2022 Final] 让我们赢得选举 upd 2024.11.14 贪心+dp 看完题目,觉得挺难。随着时间推移,协作者们可能在不同位置,怎么考虑? 如果考虑协作者们一起做事,会不会最优呢?事实证明是会的。所以同一时刻有且只有一个州在演讲。这就简化了思考量。 现在怎么考虑演讲
阅读全文
摘要:CF786B Legacy 线段树优化建边。 首先 建边会 ,于是考虑优化。对于区间建边,我们可以用线段树优化建边。本质是用线段树上延迟标记的性质,可以先把边建在更大的节点上。 具体的,考虑维护两棵线段树,第一颗父亲向儿子连 边,表示大区间到小区间无代
阅读全文
摘要:P9130 [USACO23FEB] Hungry Cow P 动态开点线段树+线段树二分 考虑线段树。 首先区间范围是 ,而需要的点只有 个,所以需要用到动态开点线段树。 考虑合并,需要维护每个区间留下的稻草 和还没填的空的数
阅读全文
摘要:P5324 [BJOI2019] 删数 转化条件+线段树 由于值域不大,并且删数操作跟序列顺序无关,只和每个数的出现次数有关,考虑在值域上分析删数操作。发现对于每一个值 可以抽象为覆盖了 的区间。要使数列删空,就要让 被填满。这
阅读全文
摘要:CF1420D Rescue Nibel! 首先要发现一个性质:如果一些线段有交集,那么交集一定是条线段,并且一定有其中一条线段的左端点是交集的左端点。 所以方案可以转化为求其中一条线段的左端点是交集的左端点的方案数。 这启发我们枚举每个点作为交集的左端点,计算至少有一条线段的左端点是这个点的方案数
阅读全文
摘要:CF1861C Queries for the Array 不太一样的写法,感觉比较容易理解一点。码量也比较短。 首先我们要发现:一个序列如果目前是升序的,那么它不管删多少个数(中间不再加数),最终还是升序的;如果目前不是升序,那么不管加多少个数,最终也不是升序。 这启发我们用两个数组 \(up_i
阅读全文
摘要:P9755 [CSP-S 2023] 种树 首先,容易看出单调性,可以对最少天数二分。转为判定性问题后,我们思考如何判定。对于每棵树,都可以从刚种下长到最后一天。我们由此可以写出 表示第 棵树从第 天长到第 天的高度。 \(calc
阅读全文
摘要:P9837 汪了个汪 人类智慧题,虽然看懂了,但还是想不出来。 考虑正解。 个不同的数的无序二元组有 个,而在棋盘上出现的无序二元组也有 个,这说明我们必须不重不漏的把所有无序二元组都放进棋盘。 对于构
阅读全文
摘要:CF1603C Extreme Extension upd 2024.11.14 数论+dp 首先要思考的一定是怎么操作操作次数会最小。然后就会发现一种贪心策略,即让每次分裂出来的最前面的数尽可能大。 求它的所有非空子段的极端值之和不好直接求,但它等价于求每个位置可能的操作次数(可重)之和。(答案的
阅读全文
摘要:P5021 [NOIP2018 提高组] 赛道修建 upd 2024.11.14 求最大值最小,通常先从二分思考。 枚举完二分的值以后,也就限制了最小值的下界。我们要让满足下界的赛道尽可能多。 由于是树,解决这样的问题就有树上 dp 和贪心。 到底是哪一个?走 dp 的话,状态已经不好设计了,难以描
阅读全文
摘要:P3592 [POI2015] MYJ upd 2024.11.13 区间 dp 这题的思路没有特别明显。可以从答案的计算出发,既然要消费,不妨设 的最小值位置在 ,那么在这里消费的顾客是可知的。 这时候剩下有消费的顾客一定在 和 \([p+1,
阅读全文
摘要:P4314 CPU 监控 这题是维护历史最大值模板。 先套线段树,考虑怎么维护标记。 我们发现普通的标记的维护遵循能合并就合并,但是这就会出现问题:假如一个标记还没有下传时就被修改(也就是减小),那就会导致子树的历史最大值不正确(变小)。 考虑先不合并同一个节点的标记,把它们看成一个操作序列。这里讲
阅读全文
摘要:BZOJ2908 又是nand 首先手玩需要计算的值,发现既不满足交换律也不满足结合律,不好维护。 对于位运算,常见的考虑分开每一位计算贡献,对于单独一位,计算较为简单。 既然计算的值只能按顺序计算,那我们只能考虑树剖(其他数据结构不好维护顺序)。给每一位建一棵线段树,在线段树上维护。 注意到 「树
阅读全文
摘要:P4198 楼房重建 求从 往上看能看到多少栋没被挡住的楼房,带修改。 对于带修改的题目,我们需要快速维护,就需要用到数据结构。这时候通过直觉可以想到,问题是可以分为子问题然后合并得到的,所以我们考虑线段树。 观察到能被看到的楼房,从左到右斜率递增,即我们需要维护斜率递增的序列。
阅读全文
摘要:Sasha and Array 典题,但还是第一次见。 首先看到斐波那契数列,可以想到矩阵快速幂。 想到这一点之后,很大一部分都解决了。对于修改操作,实际上就是乘以一个矩阵。对于查询,就是矩阵加法。 考虑用线段树维护矩阵。首先区间和可以矩阵加法直接做。由于我们需要区间乘,需要考虑如何下传标记,然后发
阅读全文
摘要:P5648 Mivik的神力 upd 2024.11.13 卡常倍增 或 树状结构维护 统计类问题,一般思路是找到数据结构维护关键信息。 这题拆不了式子,但是如果可以注意到前缀最大值的单调性,这时候就有非常多的数据结构可以维护了。 单调性怎么用? 贡献是一段段区间的形式,暴力的倍增是首想。 如果将每
阅读全文
摘要:P8539 「Wdoi-2」来自地上的支援 移项维护特殊值。 这题思路还是挺简单的。 首先分析操作。发现操作序列一定是单调递增的,也就是每个数只会被选中连续几次,之后就不会再被选中了。 然后分析询问。我们发现要满足条件, 显然是在 被选中。 那么首先 \(x+
阅读全文
摘要:P9746 「KDOI-06-S」合并序列 upd 2024.11.13 经典区间dp+预处理 只要是做了入门区间 dp 的人都应该看出来。 怎么优化呢?发现了转移时枚举了冗杂转移,原因是可达性 dp 的转移只需要找到一个合法转移即可。 怎么找到一个合法转移? 这时候可以试试预处理一些信息加速转移。
阅读全文
摘要:P9493 「SFCOI-3」进行一个列的排 upd 2024.11.13 性质+dp 题目实在难以入手,至少连手玩都困难。这时候适当放宽题目限制,方便观察,也容易发现一些必要条件。 这题中我们就先将长度限制去掉,通过手玩,进而发现了序列一定是下凸的。这就固定了序列的形式。 看到求排列方案数,可以想
阅读全文
摘要:P9871 [NOIP2023] 天天爱打卡 upd 2024.11.13 经典dp+线段树优化+离散化 可以看到求的是最大值,常用工具有 dp 和贪心。如果 dp 做的多的话应该可以看出这题就是个线性 dp(先忽略超大的数据范围)。 小的时候,可以直接以当前天数设状态,转移就是一段后缀
阅读全文
摘要:CF1615F LEGOndary Grandmaster 计数好题,转换条件+转化贡献+组合数 首先题目的操作没有什么好的性质,考虑一个经典的 trick,将奇数位置上的数字取反,于是题目的操作变成 或 。这个操作
阅读全文