- 2024-12-29Splay初步
更好的阅读体验?前言前置知识:二叉搜索树其实Splay的实现蛮多的,如果真的要能懂的话建议自己画图理解。加油。基础操作准备操作我们先把节点要维护的先定义出来。子树大小节点的权值左儿子右儿子父亲sizevalch[0]ch[1]fastructnode{intsize,val,
- 2024-12-24[学习笔记] splay
前置:二叉查找树在二叉查找树上做许多操作都十分方便。然而递归树的层数意味着时间复杂度为树高级别。当树是链状时,时间复杂度会退化。各类平衡树的存在大都为了使二叉查找树“平衡”,即高度不会超过\(\logn\)(\(n\)为树的结点个数)。如此以来,在二叉查找树上的操作就有了时间复杂
- 2024-12-08普通平衡树
P3369【模板】普通平衡树题目链接您需要动态地维护一个可重集合\(M\),并且提供以下操作:向\(M\)中插入一个数\(x\)。从\(M\)中删除一个数\(x\)(若有多个相同的数,应只删除一个)。查询\(M\)中有多少个数比\(x\)小,并且将得到的答案加一。查询如果将\(M\)从小到大排
- 2024-12-06[学习笔记 #7] Link Cut Tree
目录[学习笔记#7]LinkCutTreeLCT的基础作用、优势和劣势结构基本操作PushUpReversePushDownIsRootPushDownAllWhichRotateSplayAccessMakeRootFindRootLink&Cut&Split单点修改&单点查询&链修改&链查询维护边的信息维护子树信息洛谷上的模板题的代码LCT的应用[动
- 2024-12-02牛客练习赛132
题目:A春链接:A-春_牛客练习赛132思路:只需要把最短的两条分别放在最两端即可。最短的两条只需要计算一次(所有的等腰梯形的上底和下底全部算上,这两条只需要加一次),其他的都需要加上两次。代码:#include<iostream>#include<algorithm>#include<vector>usingnamespacestd;#def
- 2024-11-24蒙特卡洛方法:概率与随机性的强大工具
目录一、什么是蒙特卡洛方法?二、蒙特卡洛方法的基本原理 1.估计积分 2.计算概率 3.蒙特卡洛树搜索(MCTS)三、常见应用场景 1.计算圆周率 2.金融风险分析 3.优化问题 4.物理模拟四、Python代码示例 示例1:计算圆周
- 2024-09-12Splay 浅谈
Splay树定义Splay树是一个二叉平衡搜索树,它可以通过Splay操作将一个结点旋转至根结点或者一个给定的结点的下一层,使得整棵树仍然满足二叉搜索树的性质。Splay树可以在均摊\(O(\logn)\)的时间内完成查找、插入、查询、删除等操作。二叉搜索树的定义:空树是一个二叉
- 2024-08-29【模板】普通平衡树
具体讲解见OI-wiki(他的左旋右旋跟蓝书的有点不一样,按照蓝书的理解,代码见下),下面是一些补充拓展:1.将一个序列插入到\(x\)的后面:找到\(x\)的后继\(y\),先将\(x\)伸展到根,再将\(y\)伸展到\(x\)的右子树,此时由于\(y\)是\(x\)的后继所以\(y\)的左儿子为空;对序列建出一棵二叉树(可以像线
- 2024-07-30动态树问题
[参考资料]LinkCutTree-OIWiki动态树练习题-题单-洛谷 一.动态树问题树上查询问题是指,给定一个图论中的树结构,需要对树上的子树或者链进行一系列改查的问题。和序列问题中一般常说的“动态”和“静态”不同。动态树问题一般指在树结构发生改变的情况下,在树
- 2024-07-17Splay 学习笔记
Splay树,或伸展树,是一种平衡二叉查找树,它通过Splay/伸展操作不断将某个节点旋转到根节点,使得整棵树仍然满足二叉查找树的性质,能够在均摊O(\logN)时间内完成插入,查找和删除操作,并且保持平衡而不至于退化为链。Splay树由DanielSleator和RobertTarjan于1985年发明
- 2024-07-16LCT小记
简介LCT是常用的一种动态树。对于一般的树上问题,我们会用树剖解决,但是如果遇到动态增删边的问题就需要LCT来解决。LCT的本质上是一种链剖分,我们将所有的边剖分为虚边和实边,所以整棵树是由若干条实链构成的,实链之间用虚边相连。我们通过splay来维护实链的信息,并以从上到下
- 2024-07-05FHQ treap(再见splay------)
但凡打过平衡树的应该都知道\(\huge{二逼平衡树}\)这道题,抄了两个小时的splay版题解,然后发现了\(\color{maroon}FHQtreap\):$\large\color{green}这是splay$structjjtree{ inlinevoidup(rintx){sz[x]=sz[son[x][0]]+sz[son[x][1]]+cnt[x];} inlineboolso(rintx){retu
- 2024-07-05封装目录
stringin_high_precisionforwardstarmatrixhigh_precision_vector3.0BITSlidingWindowdemap/vector/eint/fastioRanderStringAddition_InFixstringordered_vectorsplay
- 2024-07-04splay-前驱后继
在平衡树中,经常会让我们查一下一个值的前驱或后继是谁,写两个函数就非常麻烦好吧,所以这里咱们用一点小技巧来让他变成一个函数(这里的前驱后继定义时包括与本身相等的值)代码点击查看代码intnxt(intk) { if(!m[rt].size)return0; introot=rt; while(k!=m[root].val&
- 2024-07-02平衡树专题Splay
写在前面:部分来自孙宝(@Steven24)的博客,表示感谢。认识什么是Splay就是BST的一种,整体效率是很高的,均摊的次数是O(logn)级别的。基本操作就是把节点旋转到BST的root,从而改善BST的平衡性,但是很多人会在旋转中转晕建议找个动图看看,或是上B站找个几分钟的视频看看就理解了。烧烤
- 2024-06-23[题解]P2042 [NOI2005] 维护数列 - Splay解法
P2042[NOI2005]维护数列一道思路不难,但实现细节很多的平衡树题,调了一天半终于做出来了w。对于初始序列,我们可以直接构建一条链(毕竟一个一个调用插入函数也可能形成一条链)。题解有递归直接构建成一棵严格平衡的二叉树的,这样也可以,常数可能会小一点。其中区间反转就是裸的文艺