【POI06 TET】二维线段树

终于知道二维线段树怎么写了!

想来也有点好笑,我搞了这么久OI居然连二维线段树都不会写~

以前一直因为这个二维线段树的标记怎么放没搞得清就一直搁着没写,这才终于了却这一“心结”

这个题要求在二维线段树上支持两个操作

1:将一个子矩阵修改成某个值

2:询问某个子矩阵的最大值

整个矩阵中的值都是单调非降的,也就是说可以用一种不用下放标记的线段树写法来处理一维的情况

一维的情况:

线段树上的每个结点记录两个值

cover——被完整覆盖的值

max——子树中cover的最大值(包括自己)

然后询问的时候

如果询问的区间包含该节点的区间,则返回max值,否则用该点的cover更新一下,继续递归

修改的时候对应修改即可

增至二维,与之类似的,第一维没有变化,第二维这个时候就要开两个线段树了,一个cover的线段树,一个max的线段树

询问时,在第一维上做的时候,如果询问的区间包含了该结点,则返回第二维上对应区间的max值

而如果没有包含,就用第二维上的cover值更新一下,继续递归

第二维线段树跟一维的情况完全一样

总的时间复杂度就是O(QlogNlogN)了

ps:我代码中的0域表示cover值,1域表示max值

代码:

 

 

再说一点,好久没写过blog了,最近搞的东西都懒的发上来,以后会补上的!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值