都是树的变种,用途不同

【线段树 Interval Tree】

区间管理,是一种平衡树

可看做是对一维数组的索引进行管理。一维数组不需要是排序好的

深度不超过logL

任一个区间(线段)都分成不超过2logL条线段

优点:在O(log L)时间内完成一条线段的插入、删除、查找、求和等

适用于和区间统计有关的问题。但是该问题必须是可以分解成不同子区间的问题的综合

【树状数组】

解决需求:频繁的求某一段之和,并且需要对数组进行动态的增加和删减结点

求和的时间复杂度减低为log N

增删结点的时间复杂度保持为log N (但是常数项可能会很大。如果多次增删结点,可考虑改用线段树)

【树堆】

解决需求:通过“随机”保持排序二叉树的平衡性,保持检索的高效性

类似于排序二叉树

但是结点保存的数据为<key, value>

从key的角度看,是一棵排序二叉树,即,左子节点key<=父节点key <右子节点key

从value角度看,是一个最大堆,即,父节点value >= 子结点value

建树过程:给每个结点赋一个随机的value,先按排序二叉树的插入方法插入,然后调整使之满足最大堆的性质。通过旋转实现。每个结点插入时的时间复杂度为O(lg N),N为已有的节点数

【笛卡尔树】

和数堆很像。但是需求不同,建树过程也不同

解决需求:未知

建树过程:时间复杂度可以为O(N),N为所有的节点数

先按key从小到大排列,然后依次插入树。保留一个数据栈,栈底是根节点,从栈底到栈顶依次是从根节点出来的右子路径。

每次要插入的结点,根据value值找它应该插入的位置。

转载于:https://www.cnblogs.com/chenhuanfa/p/3413387.html

[算法学习] 线段树,树状数组,数堆,笛卡尔树相关推荐

  1. 笛卡尔树(超详细!!!)

    0x01 介绍 笛卡尔树是一种特定的二叉树,可由数列数列构造,在范围最值查询.范围top k查询(range top k queries)等问题上有广泛应用.它具有堆的有序性,中序遍历可以输出原数列. ...

  2. 「LOJ2474」「2018 集训队互测」北校门外的未来-笛卡尔树及其扩展+LCT

    Description 链接 Solution 对于一棵树 TTT,定义其的笛卡尔树 C(T)C(T)C(T) 满足: 堆性质,即祖先的权值(本题中为标号)一定大于子孙的权值. 搜索树性质,即任意子树 ...

  3. P1377 [TJOI2011]树的序 笛卡尔树优化建树

    传送门 文章目录 题意: 思路: 题意: 给你一棵二叉树的生成序列,让你输出一个字典序最小的序列,使其生成的二叉树与原来的二叉树相同. 思路: 首先想到暴力建树,让后输出先序遍历即可,但是这样如果二叉 ...

  4. [CodeJam 2019 Round 3] Rancake Pyramid(笛卡尔树)

    CodeJam 2019 Round 3 Rancake Pyramid problem solution code problem 神奈子是个很爱打麻将的老婆婆,有一天她把她的麻将放成了 nnn 堆 ...

  5. 【笛卡尔树】【树状数组】Beautiful Pair(P4755)

    正题 P4755 题目大意 给你n个数,问你有多少对二元组 (i,j)(i,j)(i,j) 满足 i≤ji\leq ji≤j 且 ai×aj≤maxi=ijaia_i\times a_j\leq ma ...

  6. P4755-Beautiful Pair【笛卡尔树,线段树】

    正题 题目链接:https://www.luogu.com.cn/problem/P4755 题目大意 nnn个数字的一个序列,求有多少个点对i,ji,ji,j满足ai×aj≤max{ak}(k∈[l ...

  7. [线段树or笛卡尔树+简单KMP]poj4005 or hdu4125 Moles

    题意:N只编号1-N的鼹鼠打洞,第i只编号为a[i],编号不重复.打的洞的样子符合以a[i]为值,以下标为插入顺序的二叉搜索树.现在从根出发,存在左子树则先走左子树,否则往右走,每经过一个洞(结点), ...

  8. YbtOJ#752-最优分组【笛卡尔树,线段树】

    正题 题目链接:http://www.ybtoj.com.cn/problem/752 题目大意 nnn个人,每个人有cic_ici​和did_idi​分别表示这个人所在的队伍的最少/最多人数. 然后 ...

  9. 问题 N: 扶桑号战列舰(笛卡尔树or差分数组)

    问题 N: 扶桑号战列舰 时间限制: 1 Sec  内存限制: 128 MB  Special Judge 提交: 169  解决: 52 [提交] [状态] [命题人:admin] 题目描述 众所周 ...

最新文章

  1. jradiobutton设置默认选项_JRadioButton(单选按钮)添加事件监听
  2. php实现人员权限管理(用户界面)
  3. 采用无线网桥做监控有什么优势?无线网桥的组网模式有哪些?
  4. php倒计时关闭订单,订单倒计时取消,nodejs 辅助实现倒计时任务
  5. java扫描器创建,java – 如何创建条码扫描器(Android)?
  6. 使用 redis 减少 秒杀库存 超卖思路 (转)
  7. python中通过index删除list中的多个元素
  8. CANTest软件安装成功经验
  9. 再写轮播图——两张图切换,一张充当背景并且模糊,一张做展示图
  10. 线程数据共享:pthread_getspecific和pthread_setspecific
  11. 8-9 魔术师_动画魔术师:将作弊变成艺术形式的8种方法
  12. java 自动登录_java代码实现自动登录功能
  13. 经纬度与墨卡托坐标转化
  14. Claus Hansen加入Entrust Datacard,担任亚太地区和日本销售副总裁
  15. 修改html会影响seo,网站修改css影响seo吗?
  16. 程序员“薪资被应届生倒挂“现象明显,跳槽还是等待?
  17. python 爬虫斗图吧 多页图片
  18. 常见的机器学习数据挖掘知识点
  19. linux里面的注释命令是啥,bash脚本中单行及多行注释方法
  20. 惊呆!编程就像写文档!开发神似搭积木!

热门文章

  1. win2003服务器装spl2008,打安全补丁后无法进入SQL Server Management Studio
  2. [源码和文档分享]基于VC++控制台实现的图书信息管理系统
  3. VC++中字符串编码处理的一些相关问题
  4. 运行里用\\加IP地址访问远程主机和用mstsc登录远程主机有什么区别??
  5. Ubuntu+Apache+PHP+Mysql环境搭建
  6. hive like 模糊匹配
  7. Lucene查询语法详解
  8. (转载)不一样的冒泡排序
  9. 偶得--Unity在asp.net mvc上的基本应用
  10. 获取设置本地当前默认打印机