![](https://img-blog.csdnimg.cn/20201014180756916.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
<<<<<<<登峰造极>>>>>>>
文章平均质量分 69
I_AM_HelloWord
爱好编程信息学
展开
-
登峰造极之树——左偏树
左偏树其实就是个堆,而且是个可并堆,可并堆是指可以在O(logn)的时间内完成两个堆的合并的堆结构。显然,二叉堆虽然实现容易,并且好理解,但是合并需要O(n)的时间。左偏树不是一个完全二叉树,更不是一个平衡树,顾名思义,它的左儿子的比重应该大于右儿子。那么在一个树中我们如何确定左儿子与右儿子的比重大小关系呢?我们可以一个定义:距离。我们定义一个左偏树的距离是其根节点到右儿子原创 2017-08-26 21:42:17 · 458 阅读 · 0 评论 -
登封造极之树——树链剖分
解决问题:给出一个树,有两个操作:1.修改某条树边的权值。 2.求某个节点到另一个的路径中的最大边权值。基本原理:如果不是一棵树,而是一条链,那么很清楚用线段树做。而现在就是一棵树,那么我们就可以将树分成一条一条的链。算法步骤:1.构造:我们称这些链为重路径,每两条重路径之间由一条轻边连接,对于一棵树,每一个父节点u有且仅有一条重路连向一个子节点v,这个子节点v必原创 2016-05-19 12:29:58 · 826 阅读 · 0 评论 -
登峰造极之树——平衡树
在所有的平衡树中,为陈启峰提出的SBT最富盛名,并且最快最方便。下面就是我对此的学习过程。首先要了解二叉排序树,然后要明白了旋转在平衡过程中的重要地位。有左旋和右旋之分,下面以右旋为例,左旋对称即可:以上为原树,经过右旋后得到:于是我们可以很清楚的得到右旋代码:void RR(int &t){ int k=left[t]; left[t]=right[k];原创 2016-05-14 19:30:33 · 358 阅读 · 0 评论 -
登峰造极之树——Size_Blanced_Tree萌新入门教程
先前的博文:旧版SBT教程洛谷P3369是道模板题,我在洛谷P3369中详细的写了一个题解,这里就直接copy来了。当时写的时候把zig,zag表示的旋转方向弄反了,大家将就这看吧。大家自己打的时候就把zig改成left_rotate,把zag改成right_rotate。184ms / 3.15MB代码:2.61KB C++11时空以及编程复杂度都还好吧= =,大原创 2017-08-28 09:42:05 · 508 阅读 · 0 评论 -
登封造极之数论——闯入模世界
基本问题:ax+by=gcd(a,b)关键点:a^-1(a的模逆元)*a=1(mod b),只要解出a的逆元,问题就可以迎刃而解了。原理1:费马小定理:a^p(p是质数)=a(mod p) 变形:a^(p-1)=1(mod p) a^(p-2)*a=1(mod p) 所以:a^-1=a^(p-2)(m原创 2016-05-26 12:29:09 · 960 阅读 · 0 评论 -
登峰造极之树——Splay伸展树
这个splay也是个很有趣的数据结构,它是为了平衡权值二叉树而提出的,却最终不是以权值二叉平衡树的形式被广泛使用,而是去维护序列的区间修改(某些线段树实现不了的区间修改,如区间翻转等),很多萌新在初学splay时都看的是平衡权值二叉树形式的,所以突然接触区间翻转等问题会有困难。这里我就不讲splay的权值平衡树的形式了(网上资料很多),而是主要讲一讲怎么去理解splay去维护区间(几乎没有人解释的原创 2017-08-28 10:04:57 · 1316 阅读 · 0 评论 -
登封造极之字符串——后缀数组
定义:给出字符串T,将T的所有后缀(包括空串和本身)排序后,得到一个顺序,定义sa[i]数组表示第i小的后缀是从T的哪个位置开始的,如:T=aabcd则有sa={0,1,2,3,4,5}构建:直接模拟,得出所有的后缀快排,则O(n^2*log n) 效率不够,定义S[i,k]表示从第i个位置开始的长度为k的字符串,rank[i,k]表示在所有排好序的S[i,k]原创 2016-05-26 13:03:06 · 887 阅读 · 0 评论