首页 > 其他分享 >树套树

树套树

时间:2024-12-30 22:10:18浏览次数:1  
标签:结点 树套 val 线段 复杂度 log

树套树

简介

就是一个树的结点里面再搞一棵树,维护结点信息。

树套树要保证其空间复杂度正确,关键应该在于保证每棵内层树的大小与其外层树节点满足小复杂度关系。

树套树要保证其时间复杂度正确,关键应该在于保证每次操作需要访问外层树节点个数可接受以及每次访问内层树的时间复杂度可以接受。

但是我觉得更加困难的是思考应该使用什么数据结构去维护。

线段树套平衡树

一般来讲,线段树维护区间 \([l,r]\) 的答案,那么我们就开一个 \(r-l+1\) 个结点的平衡树来维护这个区间啊。空间复杂度是 \(O(n \log n)\) 的,时间复杂度是 \(O(n \ poly(\log))\) 的。

P3380 【模板】树套树

树套树板子题。

\(5\) 种操作:

  1. 查询 \(val\) 在区间 \([l,r]\) 的排名:对每个相关的线段树结点数一下这个区间里 \(<val\) 的元素数量。单次时间复杂度 \(O(\log ^2 n)\)。
  2. 查询区间 \([l,r]\) 第 \(k\) 大的元素是什么:二分答案 \(val\),\(check\) 里面就求 \(val\) 在区间的排名。单次时间复杂度 \(O(\log ^3)\)。
  3. 将位置 \(pos\) 的数字改成 \(x\):对每个相关的线段树结点修改其平衡树即可。单次时间复杂度 \(O(\log^2)\)。
  4. 查询值 \(val\) 在区间 \([l,r]\) 的前驱:对每个相关的线段树结点求前驱,然后取最大值。单次时间复杂度 \(O(\log^2)\)。
  5. 查询值 \(val\) 在区间 \([l,r]\) 的后继:对每个相关的线段树结点求后继,然后取最小值。单次时间复杂度 \(O(\log^2)\)。

code

P3316 [SDOI2014] 里面还是外面 黑色的毒瘤数据结构题。

标签:结点,树套,val,线段,复杂度,log
From: https://www.cnblogs.com/liyixin0514/p/18642558

相关文章

  • 【知识】树套树
    树套树顾名思义,就是一个树套着一个树。例如:线段树套平衡树,线段树中的每个节点的区间用平衡树维护。常用:外层:线段树,树状数组内层:平衡树,线段树。(一般可以用STL)例题:AcWing2488没啥好说的,线段树套set#include<bits/stdc++.h>usingnamespacestd;constintN=5......
  • 树套树
    树套树简介简单来说就是两个树形数据结构的嵌套,一般是值域套区间,或者区间套区间(二维区间)。P3380【模板】树套树看到查询排名与第\(k\)大会想到主席树,但其无法支持修改。所以考虑树套树,外层用棵线段树表示区间,内层用一棵权值线段树表示值域。考虑如何实现操作二,尝试二分,时......
  • 树套树
    树套树还有很多东西要补...第\(k\)大值都树套树了,这里面就不写整体二分的离线做法LuoguP3242[HNOI2015]接水果形式化一下题意给定一棵\(N\)个点的树,现在树上有\(P\)条关键路径\(u_i\tov_i\),同时每条路径有权值\(c_i\)有\(Q\)次询问,每次给出一条路......
  • 树套树
    树套树这里主要介绍树状数组套权值线段树的方法,毕竟基本上所有的树套树题都能用这种方法解,并且时间复杂度都是\(n\times(logn)^2\)。思路这里有一道例题。【模板】树套树题目描述您需要写一种数据结构(可参考题目标题),来维护一个有序数列,其中需要提供以下操作:查询\(k\)......
  • [DS 小计] 树套树
    笔者很菜,只会最简单的树状数组套权值线段树。不是,这玩意不就套娃吗,真ex啊题目简要:求\(x\)排名求排名为\(x\)的数求\(x\)前驱后继我们学了权值动态开点线段树就知道这些问题乱写就行了。但是套上\([l,r]\)区间呢,无修呢?我们会主席树这些乱写就行了。但是套上有......
  • CF19D(树套树)
    一道非常有意思的树套树。一眼一个空间\(n\logn\)时间\(n\log^{2}n\)的树套树,发现过不了。考虑优化。我们发现在中间线段树的地方可以不用平衡树存下来,只记最大值即可。然后我们对于每个横坐标开一颗fhq,然后分出\(\logn\)段区间,这些区间的最大值大于给定点的纵坐标。然后用......
  • 树套树从入门到去世
    如何实现数据结构的嵌套?首先我们知道,单个数据结构是对一些存有某些信息的节点进行操作,从而达到目的。然后我们将这些节点换成另一种数据结构,更改的时候对某些数据结构进行修改,就可以实现嵌套。二维树状数组其实是最好写的一种树套树。单点修改,区间查询就像上文说的一样,我们......
  • 树套树
    树套树树状数组,(动态开点线段树),平衡树二逼平衡树您需要写一种数据结构(可参考题目标题),来维护一个有序数列,其中需要提供以下操作:查询\(k\)在区间内的排名查询区间内排名为\(k\)的值修改某一位值上的数值查询在区间内的前驱(前驱定义为小于,且最大的数)查询\(......
  • 树套树板子,但是带修莫队+值域分块
    \(\text{Link-LuoguBlog}\)原题传送门没啥重要的事情,就是终于过了这题非常开心,发现自己是莫队的时间戳部分写错了调了114514年我也只能说是十分趣味。以及今天深刻地认识到了带修莫队应该len=pow(n,0.66);。就是裸的带修莫队+值域分块,就不说了,直接放代码了昂。如果有人......
  • 树套树
    伪树套树CF19DPoints我们只关心最值而不是所有点的信息,所以不需要真的矩形查询对\(x\)建权值线段树,维护纵坐标最大值就能线段树二分求出询问矩形中最小的横坐标,再在这个横坐标上找最小纵坐标即可,可以在叶子上用set维护\(y\)实现。时间复杂度\(O(n\logn)\)......