树套树-线段树套线段树

作用

可以解决矩阵区域修改问题。

实现

先按照行建立线段树,然后在行线段树的每个节点下再按照列建立线段树。以2*3的矩阵为例,如下:
这里写图片描述
我们称外层的为x树,内层的为y树。
1.单点修改
对于y树的修改,就和普通线段树一样,主要就是x树的修改稍有不同。
①当前x树节点是叶节点
修改这个x树节点所对应的y树,由于是单点修改,找到y树叶节点时,直接修改。
②当前x树节点不是叶节点
修改这个x树节点所对应的y树,同理找到y树叶节点,但是不能直接修改,而是要从当前x树的儿子所对应的y树的相同的叶节点更新上来(因为不仅y树是单点修改,x树也是),可能有点绕,画个图:
这里写图片描述
因为每棵y树结构一样,所以就可以较方便实现更新(一般用完全二叉树法存线段树套线段树,不用链式存,因为链式找不同x树的相同y树节点有点麻烦,但不是不可以,留给读者自己思考啦)。
2.查询
查询就很简单了,由于修改时节点信息都修正过了,所以和普通线段树一模一样。

ps:多行修改很难实现,因为x树的Lazy-tag是区间,无法合并。

模板题

HDU4819题解传送门

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值