博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[学习笔记]标记永久化
阅读量:6201 次
发布时间:2019-06-21

本文共 1510 字,大约阅读时间需要 5 分钟。

线段树出了名的操作是lazy标记。

普通lazy标记涉及到pushup和pushdown

这个pushup只涉及两个儿子合并,并且两个儿子是两个点。

但是有的时候,两个儿子是两个树,pushup复杂度就爆炸了。

给你一个线段树的树套树,外层的线段树pushup一下,就对应里面每个节点对应pushup。O(n^2log^2n)优秀数据结构诞生辣

 

还有的时候,主席树要区间修改。

每次修改操作我们在之前基础上建一棵新树,问题是,儿子是共用的,pushdown一下,之前的版本也会受到影响。凉凉。

 

所以要标记永久化。

 

标记永久化,就是标记不用pushdown,自然也不用pushup(开始建树的时候,可能要pushup)

 

以一维线段树区间加,区间求和为例。

add懒标记,sum是和。

upda时候,路上的sum都加上c*len;如果到了该返回的完全包含节点时候,再把add加上c。

query的时候,把路上的add都做和,到了该返回的节点的时候,返回sum[x]+addsum*len(注意这一层的add别加了就)

可以发现,一路统计,一路标记下来,add,sum有机配合,就可以算出了。

可以理解为,query的时候,在x节点的父亲做过的赋值用add求了出来,x子孙做过的赋值sum已经处理完毕。所以没有问题。

 

真正的例子:

二维线段树,矩形求max,矩形取max

(ps:这个题不是矩形取max的话,如果是矩形赋值,标记永久化还真做不了。。)

外层行,内层列。

对于外层的线段树,这个是不能懒标记的。

类比上面开两个变量,这里我们开两个树。

一个mx树,节点上的内层线段树记录这若干行压缩起来的最大值

一个tag树,节点上。。。。。。。。。。。。所打标记的最大值

然后update,query类比即可 。

 

内层线段树由于儿子就是两个点,所以随意了。

 

代码:(空间玄学,反正卡着边界能过)

#include
#define il inline#define reg register int#define numb (ch^'0')#define mid ((l+r)>>1)using namespace std;typedef long long ll;il void rd(int &x){ char ch;bool fl=false; while(!isdigit(ch=getchar()))(ch=='-')&&(fl=true); for(x=numb;isdigit(ch=getchar());x=x*10+numb); (fl==true)&&(x=-x);}namespace Miracle{const int N=1050;int n,m,k;struct node{ int ans[2*N],laz[2*N]; void upda(int x,int l,int r,int L,int R,int c){ ans[x]=max(ans[x],c); if(L<=l&&r<=R) { laz[x]=max(laz[x],c);return; } if(L<=mid) upda(x<<1,l,mid,L,R,c); if(mid

 ps:感觉如果值不具有覆盖性(取max)或者等价撤销性(加减),就不能标记永久化了(赋值)

转载于:https://www.cnblogs.com/Miracevin/p/10092806.html

你可能感兴趣的文章
Kubernetes priviledge and capabilities
查看>>
SpringBoot学习之集成dubbo
查看>>
上海临港澄清与特斯拉并未接触,后者落地上海就是一个“乌龙”
查看>>
我面试过的那些烂技术大哥
查看>>
第145天:jQuery.touchSlider触屏满屏左右滚动幻灯片
查看>>
如何用 CSS 修出好看的照片
查看>>
乐视,你敢做VR直播吗?
查看>>
Parrot 4.6 发布,基于 Debian 的 Linux 发行版
查看>>
Linux下的echo输出换行符
查看>>
SoJpt Boot 2.3-3.8 发布,Spring Boot 使用 Jfinal 特性极速开发
查看>>
银行与区块链的结合:已经克服的挑战
查看>>
区块链101:公开和许可的区块链有什么区别?
查看>>
VR领域迎来大量融资,但智能硬件企业依然生存存疑
查看>>
网宿科技祭出杀手锏已发现云服务商致命弱点
查看>>
【观点】CFTC主席Giancarlo:支持区块链符合“国家利益”
查看>>
【钛坦白】傲游创始人陈明杰 :区块链项目投资的三板斧
查看>>
Spring MVC-处理程序映射(Handler Mapping)-控制器类名称处理程序映射(Controller Class Name Handler Mapping)示例(转载实践)...
查看>>
效益最大化,SpaceX有望在明年实现火箭组件的完全重复利用
查看>>
【AI科幻】地球陨落 · 暴风雨前的宁静
查看>>
助力企业智能化进程 深智云让一切皆有可能
查看>>