首页 > 其他分享 >树套树

树套树

时间:2023-02-09 18:15:29浏览次数:53  
标签:单点 树套 标记 询问 内层 修改 矩形

线套线

  • 规定使用 OI 坐标系。

  • (按我的代码习惯)竖着关于 \(1\sim n\) 建一棵线段树,该线段树的每个节点都是一棵内层线段树,若该节点的管辖区间为 \([L,R]\),则该内层线段树的管辖范围为 \(l,r\) 的节点的实际管辖矩形为 \((L,l)\sim (R,r)\)。

单点加,矩形查

  • 修改:在外层树上找 \(x\),经过的每个点(注意不是经过点。包括到达点)对应的内层树上都单点修 \(y\) 处。

  • 询问:在外层树上找 \([xl,xr]\),在每个到达点对应的内层树上区间查 \([yl,yr]\)。

  • 容易看出,单次修改中修改到的内层树在询问中是互斥的,即只有一个会被询问到,毕竟区间询问的到达点不共链。故其正确性显然,单操作复杂度 \(O(\log^2)\)。

矩形加,单点查

  • 做二维差分转化为单点加,矩形查。

矩形加,矩形查

  • 考虑推广单点加,矩形查的做法。先假设我们的修改的到达点全部是叶节点,此时直接沿用单点加,矩形查的操作即可。

  • 注意到这么做的问题在于,不妨举个例子,如果修改的到达点为 \([1,2]\),而询问的为 \([1,1]\),则没有算到这次修改的影响。

  • 考虑把较大的内层树视为较小的内层树的标记,在询问的过程中,从 \([1,1]\) 退栈到 \([1,2]\) 后,用完全相同于在 \([1,1]\) 对应的树上查的方式上 \([1,2]\) 对应的树来查贡献,最后要乘上区间交的长度。

  • 注意到此时可能一次修改中修改的一条链都会被当做标记永久化的标记来算贡献,显然算重了。故开标记树,其与内层树的区别在于内层树在修改中是每个经过的点都进去修,而标记树是仅在到达点进去修。然后退栈的时候在标记树而非内层树上查标记的贡献。

  • 因为区间修改和询问的访问总点数是 \(O(\log)\) 的,所以这是 \(O(\log^2)\) 的。容易看出标记树的空间严格小于对应的内层树,所以空间还是 \(O(\log^2)\) 的。

  • 如果想做区间覆盖之类奇怪的东西,则要使用扫描线模板中提到的奇怪的区间永久化方法。

标签:单点,树套,标记,询问,内层,修改,矩形
From: https://www.cnblogs.com/weixin2024/p/17106570.html

相关文章

  • 树套树做矩形加矩形求和。
    题目大意:有一个\(n\timesn\)的矩阵,每个位置上初始值都为\(0\),\(q\)次操作,分为两种:1.把横坐标在\([x_1,x_2]\)范围内,纵坐标在\([y_1,y_2]\)范围内的所有数加上一......
  • 【YBT2023寒假Day7 C】查区间(线段树套线段树)
    查区间题目链接:YBT2023寒假Day7C题目大意给你一个序列,要你维护两种操作,区间取min和区间求第k小。思路关于区间求第k小,有一个方法,是树套树。外层线段树维护位......
  • [线段树套单调栈] 2019-2020 ICPC Asia Hong Kong Regional Contest H.[Hold the Line
    线段树套单调栈2019-2020ICPCAsiaHongKongRegionalContestH.​​HoldtheLine​​题目大意你已经建造了一条由编号从到的战壕组成的防线,每条战壕最初都是空的。士......
  • 题解 树套树
    题面二叉查找树(BST)是一种简单的数据结构,本题默认你已经熟悉BST的插入和查询两种操作。给你一棵树,每个节点有一个BST。有以下两种操作:\(u,v,k\):在路径\((u,v)\)上每......
  • 【树套树与分治】
    降维方法可持久化条件:静态问题,且一般都是在线,因为可以离线的话,通常会用各方面更优的离线(分治)算法。减少一个维度后,时间复杂度去掉一个log对于二维问题,可持久化一维,如:......
  • 172 树套树 线段树套平衡树
    视频链接:LuoguP3380【模板】二逼平衡树(树套树)//需要开O2#include<iostream>#include<algorithm>usingnamespacestd;#defineN2000010#defineINF21474836......