[算法学习] 线段树,树状数组,数堆,笛卡尔树
都是树的变种,用途不同
【线段树 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
[算法学习] 线段树,树状数组,数堆,笛卡尔树相关推荐
- 笛卡尔树(超详细!!!)
0x01 介绍 笛卡尔树是一种特定的二叉树,可由数列数列构造,在范围最值查询.范围top k查询(range top k queries)等问题上有广泛应用.它具有堆的有序性,中序遍历可以输出原数列. ...
- 「LOJ2474」「2018 集训队互测」北校门外的未来-笛卡尔树及其扩展+LCT
Description 链接 Solution 对于一棵树 TTT,定义其的笛卡尔树 C(T)C(T)C(T) 满足: 堆性质,即祖先的权值(本题中为标号)一定大于子孙的权值. 搜索树性质,即任意子树 ...
- P1377 [TJOI2011]树的序 笛卡尔树优化建树
传送门 文章目录 题意: 思路: 题意: 给你一棵二叉树的生成序列,让你输出一个字典序最小的序列,使其生成的二叉树与原来的二叉树相同. 思路: 首先想到暴力建树,让后输出先序遍历即可,但是这样如果二叉 ...
- [CodeJam 2019 Round 3] Rancake Pyramid(笛卡尔树)
CodeJam 2019 Round 3 Rancake Pyramid problem solution code problem 神奈子是个很爱打麻将的老婆婆,有一天她把她的麻将放成了 nnn 堆 ...
- 【笛卡尔树】【树状数组】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 ...
- P4755-Beautiful Pair【笛卡尔树,线段树】
正题 题目链接:https://www.luogu.com.cn/problem/P4755 题目大意 nnn个数字的一个序列,求有多少个点对i,ji,ji,j满足ai×aj≤max{ak}(k∈[l ...
- [线段树or笛卡尔树+简单KMP]poj4005 or hdu4125 Moles
题意:N只编号1-N的鼹鼠打洞,第i只编号为a[i],编号不重复.打的洞的样子符合以a[i]为值,以下标为插入顺序的二叉搜索树.现在从根出发,存在左子树则先走左子树,否则往右走,每经过一个洞(结点), ...
- YbtOJ#752-最优分组【笛卡尔树,线段树】
正题 题目链接:http://www.ybtoj.com.cn/problem/752 题目大意 nnn个人,每个人有cic_ici和did_idi分别表示这个人所在的队伍的最少/最多人数. 然后 ...
- 问题 N: 扶桑号战列舰(笛卡尔树or差分数组)
问题 N: 扶桑号战列舰 时间限制: 1 Sec 内存限制: 128 MB Special Judge 提交: 169 解决: 52 [提交] [状态] [命题人:admin] 题目描述 众所周 ...
最新文章
- jradiobutton设置默认选项_JRadioButton(单选按钮)添加事件监听
- php实现人员权限管理(用户界面)
- 采用无线网桥做监控有什么优势?无线网桥的组网模式有哪些?
- php倒计时关闭订单,订单倒计时取消,nodejs 辅助实现倒计时任务
- java扫描器创建,java – 如何创建条码扫描器(Android)?
- 使用 redis 减少 秒杀库存 超卖思路 (转)
- python中通过index删除list中的多个元素
- CANTest软件安装成功经验
- 再写轮播图——两张图切换,一张充当背景并且模糊,一张做展示图
- 线程数据共享:pthread_getspecific和pthread_setspecific
- 8-9 魔术师_动画魔术师:将作弊变成艺术形式的8种方法
- java 自动登录_java代码实现自动登录功能
- 经纬度与墨卡托坐标转化
- Claus Hansen加入Entrust Datacard,担任亚太地区和日本销售副总裁
- 修改html会影响seo,网站修改css影响seo吗?
- 程序员“薪资被应届生倒挂“现象明显,跳槽还是等待?
- python 爬虫斗图吧 多页图片
- 常见的机器学习数据挖掘知识点
- linux里面的注释命令是啥,bash脚本中单行及多行注释方法
- 惊呆!编程就像写文档!开发神似搭积木!
热门文章
- win2003服务器装spl2008,打安全补丁后无法进入SQL Server Management Studio
- [源码和文档分享]基于VC++控制台实现的图书信息管理系统
- VC++中字符串编码处理的一些相关问题
- 运行里用\\加IP地址访问远程主机和用mstsc登录远程主机有什么区别??
- Ubuntu+Apache+PHP+Mysql环境搭建
- hive like 模糊匹配
- Lucene查询语法详解
- (转载)不一样的冒泡排序
- 偶得--Unity在asp.net mvc上的基本应用
- 获取设置本地当前默认打印机