~~闲扯动态开点

昨天的比赛,学长出了一道动态开点线段树的题,但是我动态开点理解的不是太深刻,导致没刚出来。其实看似那题cf2300分,但如果熟悉动态开点,那题其实就是模板题,没有什么思维含量。

普通线段树和动态开点线段树
如果用普通线段树的思维去想动态开点的线段树,呢么你就大错特错了,普通线段树的区间信息存在于节点的信息中,可以被明确的表示出来,所以你在开空间的时候,你需要把整棵树的空间都开出来,因为你需要用节点去表示,所以,如果你要表示很大的空间就会超内存。
举个栗子:

我们要表示 [ 1 e 9 , 1 e 9 ] [1e9,1e9] [1e9,1e9]这个区间,则对于普通线段树肯定有tr[k].l=1e9,tr[k].r=1e9 很显然对于普通线段树这颗满二叉树来说,空间肯定就爆了

而动态开点线段树它的节点并不含真的区间信息,它其实利用了节点在树中的位置对应的区间来表示区间信息,这样我们就可以在 [ 1 , n ] [1,n] [1,n]这个序列的满二叉上找位置开我们想要的节点,我们只需要按方向去递归即可,这样对于范围大但内存不大的线段树来说,十分的节省空间,可以说动态开点线段树是一颗残树,但树上的点都是有用的,所以我们开出有用的点,只对有用的点进行操作即可满足题意,也不爆空间

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值