数据结构-树
Best KeyBoard
这个作者很懒,什么都没留下…
展开
-
知识点 - 表达式树
知识点 - 表达式树解决问题类型:后缀表达式求值对于中缀表达式(e1)OP(e2),令根结点值为OP,左子树为e1,右子树e2,e1与e2递归。如表达式:1+2 *(3-4)-5/6 即 ((1) + ((2)*(3-4)))-((5)/(6))可以形成如下的表达式树。先序:-+1*2-34/56 前缀表达式中序:1+2*3-4-5/6 中缀表达式后序:1234-*+5...原创 2019-08-02 20:48:33 · 244 阅读 · 0 评论 -
知识点 - 文艺平衡树
知识点 - 文艺平衡树解决问题类型:您需要写一种数据结构(可参考题目标题),来维护一个有序数列,其中需要提供以下操作:翻转一个区间,例如原有序序列是5 4 3 2 1,翻转区间是[2,4]的话,结果是5 2 3 4 1复杂度:查找结点 O(logN)O(logN)O(logN)例题P3391 【模板】文艺平衡树(Splay)代码#include<iostream>us...原创 2019-08-13 09:56:15 · 125 阅读 · 0 评论 -
知识点 - 数据结构合并
知识点 - 数据结构合并解决问题类型:大致是一些不需要合并后重新拆开的题目?复杂度:O(总共开的结点数)O(总共开的结点数)O(总共开的结点数)可以证明,因为每次调用合并函数,必定会减少一个结点实现Merge 函数是数据结构合并的关键函数,其一个特征就是不可逆。int Merge(int u,int v){ if(u==0||v==0)return u|v; ls[...原创 2019-08-16 20:11:21 · 362 阅读 · 0 评论 -
知识点 - 二逼平衡树(树套树)
知识点 - 二逼平衡树(树套树)解决问题类型:查询k在区间内的排名查询区间内排名为k的值修改某一位值上的数值查询k在区间内的前驱(前驱定义为严格小于x,且最大的数,若不存在输出-2147483647)查询k在区间内的后继(后继定义为严格大于x,且最小的数,若不存在输出2147483647)也就是说,我们用一颗线段树管理下标区间 [L,R][L,R] ,然后每个线段树的节点都是一颗...原创 2019-08-08 21:23:48 · 485 阅读 · 1 评论 -
知识点 - 扫描线
知识点 - 扫描线解决问题类型:二维平面上的矩阵运算面积交面积并周长交实现离散化: 这些技巧都是老生常谈的了, 不然浮点数怎么建树, 离散化x坐标就可以了扫描线: 首先把矩形按y轴分成两条边, 上边和下边, 对x轴建树, 扫描线可以看成一根平行于x轴的直线.从y=0开始往上扫, 下边表示要计算面积+1, 上边表示已经扫过了−1, 直到扫到最后一条平行于x轴的边但是真正在做...转载 2019-08-06 16:52:21 · 247 阅读 · 0 评论 -
知识点 - 划分树
知识点 - 划分树解决问题类型: 划分树,类似线段树,主要用于求解某个区间的第k 大元素(时间复杂度log(n)),快排本也可以快速找出,但快排会改变原序列,所以每求一次都得恢复序列。复杂度: 建树 O(NlogN)O(NlogN)O(NlogN) 查找结点 O(logN)O(logN)O(logN)例题 POJ 2104题目意思就是,给你n 个数的原序列,有m 次询问,...原创 2019-08-02 19:53:42 · 181 阅读 · 0 评论 -
知识点 - 笛卡尔树
知识点 - 笛卡尔树解决问题类型: 笛卡尔树同时满足两个性质,从key来看,满足二叉搜索树的特性,从value来看,满足堆的性质1. 建树复杂度低2. 查询区间最大最小值复杂度: 建树 $ O(N) $ 查找结点 O(logN)O(logN)O(logN)例题 Removing Stones(笛卡尔树 分治)代码#include<bits/stdc++.h&...原创 2019-08-02 12:15:45 · 227 阅读 · 0 评论 -
知识点 - 平衡二叉树
知识点 - 平衡二叉树解决问题类型:插入xx数删除xx数(若有多个相同的数,因只删除一个)查询xx数的排名(排名定义为比当前数小的数的个数+1+1。若有多个相同的数,因输出最小的排名)查询排名为xx的数求xx的前驱(前驱定义为小于xx,且最大的数)求xx的后继(后继定义为大于xx,且最小的数)复杂度: O(logN)O(logN)O(logN)例题 P3369 【模...原创 2019-08-02 12:11:02 · 220 阅读 · 0 评论 -
知识点 - LCA (tarjan)
知识点 - LCA (targan)解决问题类型:两个点在这棵树上距离最近的公共祖先节点。复杂度:查找结点 O(logN)O(logN)O(logN)实现方法Tarjan算法什么是Tarjan(离线)算法呢?顾名思义,就是在一次遍历中把所有询问一次性解决,所以其时间复杂度是O(n+q)O(n+q)O(n+q)Tarjan算法的优点在于相对稳定,时间复杂度也比较居中,也很容易理解。...原创 2019-08-06 10:34:20 · 264 阅读 · 0 评论 -
知识点 - KD 树
知识点 - KD 树解决问题类型:快速在二维平面上查找一个区域的信息KD树就是干上面那件事的。可以看到,KD树是基于欧式距离度量的。Kd树原理其实跟二分查找是一样的,比如上面这些数,我要查找0这个数,我先把上面这些数进行排序,找到中间的那个树为2,因0比2小,所以接下来查找的是-2–0这个区间的数据,另半边就无需查找,在-2–0之间再进行二分取中间的树为-1,0比-1大,这样就确定了0这...转载 2019-08-06 10:33:52 · 175 阅读 · 0 评论 -
知识点 - 左偏树
知识点 - 左偏树解决问题类型:左偏树,一种可以合并的堆状结构,支持insert/remove/mergeinsert/remove/mergeinsert/remove/merge等操作。稳定的时间复杂度在Θ(logn)Θ(logn)Θ(logn)的级别。对于一个左偏树中的节点,需要维护的值有distdistdist 和 valuevaluevalue。其中value不必多说,distdis...转载 2019-08-03 20:40:39 · 106 阅读 · 0 评论 -
知识点 - 动态树(LCT)
知识点 - 动态树(LCT)解决问题类型:求LCA求最小生成树维护链上信息(最大最小,链上和等)维护联通性维护子树信息(需要配合AAA树)优化单纯性算法,在O(mnlog(n))O(mnlog(n))的复杂度下求最大流(这两个是tarjan在它的论文最开头提到的,但是我除了在一本书中看到过有关的简介(没有代码)之外,再没看到过关于它的任何资料,)复杂度:查找结点 O(log2...原创 2019-08-03 20:37:10 · 276 阅读 · 0 评论 -
知识点 - 树链剖分
知识点 - 树链剖分解决问题类型:将树从x到y结点最短路径上所有节点的值都加上z求树从x到y结点最短路径上所有节点的值之和将以x为根节点的子树内所有节点值都加上z求以x为根节点的子树内所有节点值之和复杂度:线段树建树 O(Nlog2N)O(Nlog^2N)O(Nlog2N) 查找结点 O(log2N)O(log^2N)O(log2N)例题P3384 【模板】树链剖分代码...原创 2019-08-03 20:35:46 · 81 阅读 · 0 评论 -
知识点 - 字典树
知识点 - 字典树解决问题类型:最大限度地减少无谓的字符串比较,查询效率比哈希表高。Trie的核心思想是空间换时间。利用字符串的公共前缀来降低查询时间的开销以达到提高效率的目的。3个基本性质1.根节点不包含字符,每条边代表一个字符。2.从根节点到某一节点,路径上经过的字符连接起来,为该节点对应的字符串。3.每个节点的所有子节点包含的字符都不相同。复杂度:建树 O(N∗len)O(...原创 2019-08-03 18:34:27 · 129 阅读 · 0 评论 -
知识点 - 李超树
知识点 - 李超树解决问题类型:李超树是一种线段树的应用,主要应用场合为:单点集合域,区间等差插入,求单点最值。动态地插入多条二维线段,询问某个xxx对应的yyy值的最值。修改[L,R,b,k][L,R,b,k][L,R,b,k],对于第i∈[L,R]i∈[L,R]i∈[L,R]个集合,插入b+(i−L)kb+(i−L)kb+(i−L)k,询问某个集合的最大值。实现每个线段树结...转载 2019-09-09 11:15:30 · 185 阅读 · 0 评论