口胡树套树
树套树不是一种的特定的算法,而是用来解决问题的方法,和动态规划有点相似
不妨看一个例题
也就是 P3380二逼平衡树
先介绍一种写法:线段树套平衡树
线段树内维护的就是区间
对于前驱,我们用线段树找区间,在每个节点寻找一次前驱,然后取这些点的最大值即可,后继同理
对于给定
而求给定排名,求其数字的,我们直接二分一个数字,找是否比其小的数字个数
而对于修改,就是删除点,加入点的过程
除了给定排名为
(这可太暴力了)
然后还有一种思路,那就是树状数组套动态开点权值线段树
我们大概都知道在静态区间是可以维护权值线段树,来维护排名的,但是本题多了一个修改操作,而这个修改应该会影响到后面的权值线段树
这看起来就不是很好做了
但是我们似乎想起来树状数组可以维护前缀和的情况,而权值线段树维护
于是我们就用树状数组维护前缀和过程即可
- 用树套树维护三维偏序该怎么做
求个数
首先分三个关键字排序,这样就先消掉一维
接下来,来了一个数字
而树状数组套动态开点权值线段树可以完美解决这个问题,我们首先用线段树套动态开点权值线段树来理解这个过程:在外部线段树找到询问的
我们知道 线段树 和 树状数组 在本质上是差不多的
我们就用树状数组来维护
- CF1523G Try Booking