随笔:关于线段树多类懒标记的下推顺序问题

2023大厂真题提交网址(含题解):

www.CodeFun2000.com(http://101.43.147.120/)

最近我们一直在将收集到的机试真题制作数据并搬运到自己的OJ上,供大家免费练习,体会真题难度。现在OJ已录入50+道2023年最新大厂真题,同时在不断的更新。同时,可以关注"塔子哥学算法"公众号获得每道题的题解。
在这里插入图片描述

背景:

假设现在有三种标记:覆盖,区间乘,区间加.我们的下推顺序应该是先下推覆盖标记,后下推区间乘,再下推区间加法。但是如何解释这样的顺序问题呢?

原因:

其实直观来讲,下推顺序应该要和打标记的时间顺序有关,即先打的标记先下推。但是这样复杂度无法忍受。那么考虑一个事实:

1.区间覆盖会直接置空区间乘和区间加.

2.区间乘会影响区间加.

PS:lazy标记代表该区间的每个叶子节点的值需要改变的偏移量.
假设原来 a d d [ x ] = 5 add[x]=5 add[x]=5.现在来一个 m u l [ x ] = 3 mul[x]=3 mul[x]=3.
那么原本 x x x的每一个叶子节点都应该加上 5 5 5的。那来了个乘法.那现在 x x x的每一个叶子节点都应该加上 m u l [ x ] ∗ a d d [ x ] = 15 mul[x]*add[x] = 15 mul[x]add[x]=15.

3.区间加无法影响以上任意一个

所以,1.如果区间覆盖与其他任意一个标记同时存在于某一个节点,那么证明区间覆盖一定是先来的
2.如果区间乘与一个【没被影响过的区间和】同时存在于某一个节点,那么证明区间乘一定是先来的.

所以我们下推的时候,肯定是按照以上三个顺序推(如果标记存在).

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值