
平衡树
文章平均质量分 76
TA201314
这个作者很懒,什么都没留下…
展开
-
[NOI1999]内存分配 解题报告
[NOI1999] 内存分配时间限制:1 s 内存限制:128 MB内存是计算机重要的资源之一,程序运行的过程中必须对内存进行分配。经典的内存分配过程是这样进行的:内存以内存单元为基本单位,每个内存单元用一个固定的整数作为标识,称为地址。地址从0开始连续排列,地址相邻的内存单元被认为是逻辑上连续的。我们把从地址i开始的s个连续的内存单元称为首地址为i长度为s的地址片。运行过程中有若干进程需要占用内存,对于每个进程有一个申请时刻T,需要内存单元数M及运行时间P。在运行时间P内(即T时刻开始,T+原创 2015-01-10 11:03:41 · 2356 阅读 · 0 评论 -
[bzoj4373]算术天才⑨与等差数列 解题报告
先来说一下傻逼的做法。 考虑如何约束等差数列这个条件,如果k=0,就是[最大值=最小值];否则就是区间中[相邻两数差的绝对值的gcd=k][(最大值-最小值)/(r-l)=k][区间中没有相同元素]。 gcd可以在O(log2n)O(\log^2n)的时间复杂度很容易搞出来,所以问题就在于怎么确定区间中没有相同元素。 显然,如果记每个位置下一个和它权值相同的位置在哪,那就转化成了求区间最小值的原创 2016-04-18 08:36:36 · 1338 阅读 · 0 评论 -
[spoj11482]Count on a trie 解题报告
一开始以为是AC自动机的题,发现一直不会求T的AC自动机。后来想到可以求S的sa,就发现简单多了! 我们可以dfs S,然后对于S中的一个节点处理它的询问。(二分+hash比较大小) 那么问题就在于怎么维护T的hash。本来想用可持久化块链,发现mle了。就只好学了下treap。 treap的话,如果把rank看成下标,把随机的值看成权值的话,其实就是一颗随机数列上的笛卡尔树。树高等于比前面的原创 2016-04-18 09:49:06 · 1166 阅读 · 0 评论 -
LCT学习笔记
一、什么是势能分析? 势能分析首先要有一个势能函数F(S),S是一个数据结构集合,是你要分析的所有数据结构的集合,比如说你要分析一坨splay/lct森林的时间复杂度,那么f就是splay/lct森林的势能函数,而不仅仅是一棵splay/lct,虽然它也可以是。 对于每一次操作,我们进行这样的放缩:实际运行代价+势能改变量 ≤G(n)(n=|S|)。G(n)是一个比较良性的函数。那么我们把所有操原创 2016-03-31 21:44:04 · 2574 阅读 · 0 评论 -
[poj1741]tree 解题报告
经典的点分做法就不说了(然而我写点分t了。。)线段树/平衡树启发式合并的话,就是维护子树每个节点到子树跟的距离,打一个整棵子树的标记,然后按dfs/bfs序启发式合并,合并之前先查询一下答案即可。 如果用线段树启发式合并的话,时间复杂度是O(TNlog2N)O(TN\log^2N)的,与点分一样;但是如果用splay启发式合并的话,时间复杂度存是O(TNlogN)O(TN\log N),实际跑起来原创 2016-04-21 17:31:11 · 1039 阅读 · 0 评论 -
[bzoj2555]substring 解题报告
考虑用splay维护sa,每次比较的时候二分+hash。注意要在两端加-∞和+∞的点。 时间复杂度O((n+q)log2n+m)O((n+q)\log^2n+m)(n是数据总长度,m是询问总长度) 但是普通的hash的话需要用long long+除法运算,一个点需要跑6s。所以改成自然溢出,瞬间只需要2s了。。。(要是被卡了怎么办。。) 听说如果用重量平衡树维护的话可以做到O((n+q)log原创 2016-04-13 17:36:15 · 936 阅读 · 0 评论 -
[bzoj3720]Gty的妹子树 解题报告
大概看了一眼网上的题解,跟块爷一样都写的会被卡的分块。(反正块爷出的题也不会卡自己。。) 这里说一种比较科学的做法。就是用块链维护dfs序。 维护每个节点按dfs序是在哪个块的哪个位置,对每个块维护块中节点的最浅深度、它的下一个块是哪个块,块中节点按dfs序排序的序列,按权值排序的序列。 一开始的时候每B个分一块,最后一块节点数≤B\le B。查询的时候在两边的块暴力,在中间的块里二分,时间复原创 2016-04-22 21:55:14 · 1513 阅读 · 0 评论 -
[ZJOI2012]网络 解题报告
这题还是非常奇怪的,在考试的时候做了这题的弱化版,去了求最值。 这道题要求维护一坨链,显然是可以直接上splay的,所以我考试的时候直接写了splay,结果因为两个bug调了5个小时。 求最值的话,当然也可以直接上splay。。但是那样的话很麻烦,因为没法在端点加点,所以要很复杂的讨论。直接用lct的话就好很多,但是用lct维护一坨链实在是很奇怪。。 而且这题的数据很难生成,tm拍都没法拍。。原创 2016-03-27 15:44:39 · 898 阅读 · 0 评论 -
[UVA10181]十五数码解题报告
对于有解的情况,只需ID-A*即可。 首先谈一谈估价函数,估价函数表示的应该是对期望步数的下界。我一开始想的是用所有数现在的位置到应该在的位置的曼哈顿距离和,考虑到一次交换最多令其减少2,所以还要把它除以2。后来看了题解发现所有题解都是用的所有非0数的现在的位置到目标位置的曼哈顿距离和,这样的话一次交换最多令其减少1,这样应该是比较合适的。。 我一开始写的A*,(因为没有看懂ID原创 2015-05-05 21:44:18 · 3391 阅读 · 0 评论 -
[NOI2005]维护数列 解题报告
①学会了维护最大连续子序列,跟最长全0连续子序列其实差不多;我一开始做麻烦了(用了前缀和。。)。一些需要注意的细节:②插入新节点的时候要注意维护其儿子节点的父指针;③pushdown的位置不是随便放的,它应该放在对该节点进行询问之前。④覆盖标记应该设为无穷,而不是0;因为0也可能是需要覆盖的。⑤翻转标记应该使用^=标记,而不是=。#includeusing namespa原创 2015-01-24 07:57:43 · 811 阅读 · 0 评论 -
[ZJOI2007]报表统计 解题报告
[ZJOI2007]报表统计Time Limit: 15 Sec Memory Limit: 162 MBDescription小Q的妈妈是一个出纳,经常需要做一些统计报表的工作。今天是妈妈的生日,小Q希望可以帮妈妈分担一些工作,作为她的生日礼物之一。经过仔细观察,小Q发现统计一张报表实际上是维护一个可能为负数的整数数列,并且进行一些查询操作。在最开始的时候,有一个长度为N的整数原创 2015-01-18 11:50:12 · 1095 阅读 · 0 评论 -
zkw Splay学习笔记
最近。。 最近心里颇不平静。 最近花了三天时间学了zkw Splay,发现这玩意儿真TM难写;加上各种Code Trick也还是写了好久,还有各种错误,一直在炸。一些心得:①维护size时不需要考虑太多东西,只需要改变孩子指针后直接用孩子的size维护即可,注意要在两个地方维护: 旋转的时候维护; 翻转子树链表的时候维护。②zkw Splay中左临时树是一些没有右孩子子树的节点,然后。。为了方便(真的方便么。。),我们可以一开始用每棵子树的右儿子存储它的父节点,然后再把根表反转。 反转真是一原创 2015-01-12 21:45:49 · 1402 阅读 · 0 评论 -
[CODEVS]数据结构系列 解题报告
用这两道题学了下Splay,也加深了对其的理解。平衡树的标记与线段树的标记不同,在平衡树中,所有被访问的节点一定不能有标记;否则将其Splay后就找不到其原先的左右子树了。代码(数据结构1):#include#include#include#includeusing namespace std;#include#includestruct SS{ SS * f,* c[原创 2015-01-11 20:47:31 · 888 阅读 · 0 评论 -
[Tyvj1728]普通平衡树 解题报告
用这道题学了一下Splay,结果在删除的时候遇到问题。我删除节点的方法是把待删除节点splay到根上,然后把它的后继splay到根的右儿子上,然后将其左儿子接到右儿子上——结果!就在这里!犯了一个错误,我只维护了右儿子的左儿子指针,却忘了维护左儿子的父指针!这加上前几天做的派遣。。应该说都深深地锻炼了我指针的维护能力;什么时候该维护,一定要想明白。#includeusing name原创 2015-01-09 20:59:57 · 997 阅读 · 0 评论 -
[51nod]算法马拉松18 总结
第一次打马拉松。。 a 一看题。。什么鬼。。 n=4竟然是无解,第一个点给了一个n=5的,好像是构造的挺有规律的样子。。 那就偶数无解,奇数照着他的构造方法写一发吧。。 怎么a了?不管了。。既然结束了还是要回来好好想一下是什么情况的。 偶数肯定是无解的,因为一共有n(n−1)2n(n-1)\over 2条边,那么每种颜色的边出现次数相等的话,就意味着每条边应该出现n−12n-1\over原创 2016-09-24 15:20:51 · 1428 阅读 · 4 评论