蒟蒻的数列

我们先不考虑动态开点怎么开,先想一下普通线段树怎么做

我们需要注意到题目中一个比较显眼的提示:只要求最终数列的所有元素和

这提示我们不用时时刻刻维护每个节点的和

那我们维护什么呢?

由于是要把小于k的数变成k,我们可以尝试记录每个节点的最小值

在任意时刻,根据我们对lazy的理解,一个节点的真实最小值是从这个节点走到根节点的路径中所有节点的lazy值的最大值

所以我们下传的时候注意维护lazy的最大值,上传的时候维护最小值即可

但也有另一种写法:

首先注意一细节:p在函数参数表里面是引用

然后,这里修改的时候不用下传和上传,这么做的话,对于线段树的非叶子节点其实是不满足我们对lazy的理解的(即某个时刻一个非叶子节点的真实最小值不一定是从这个节点走到根节点的路径中所有节点的lazy值的最大值)

但是由于我们在最终统计的时候只统计整个数列,所以可以只关心每个叶子节点的值,每次对区间的修改都会体现在线段树的某个节点上面,所以对于叶子来说,他的真实最小值是可以按照我们对lazy的理解来求的

如果一个节点的某个儿子节点没有被开通,那么这个儿子节点所代表的所有叶子节点走到根节点的lazy最大值就是当前这个节点的lazy,因为前面一直在下放

update 2024.5.18

其实上面的做法根本就不是懒标记,而是标记永久化

update 2024.7.29

下放的代码见Hydro OJ提交

posted @   最爱丁珰  阅读(4)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
点击右上角即可分享
微信分享提示