• 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。对于初始序列,我们可以直接构建一条链(毕竟一个一个调用插入函数也可能形成一条链)。题解有递归直接构建成一棵严格平衡的二叉树的,这样也可以,常数可能会小一点。其中区间反转就是裸的文艺
  • 2024-06-20[题解]P3391 文艺平衡树 - Splay解法
    P3391【模板】文艺平衡树给定序列\(1,2,\dots,n\),接下来\(m\)次操作,每次操作给定\(l,r\),你需要翻转\([l,r]\)。所有操作结束后,请输出这个序列。我们先从“普通平衡树”这一题出发,思考一下Splay操作的本质。我们把一个节点Splay到根节点后,中序遍历在自己前面的节点都在左边,中
  • 2024-06-20[笔记]Splay树
    前置知识:树的左旋、右旋。Splay树是一种平衡树。能够做到每个操作均摊\(O(\logN)\)。前言与上文AVL树不同之处在于,AVL树在任何操作结束后,都能保证每个节点的左右子树高度相差不超过\(1\)。相应地,每个操作都是严格的\(O(\logN)\)。而Splay树并没有对“平衡”的确切定义,任何结
  • 2024-05-25平衡树 Treap & Splay [学习笔记]
    平衡树\(\tt{Treap}\)&\(\tt{Splay}\)壹.单旋\(\tt{Treap}\)首先了解\(\tt{BST}\)非常好用的东西,但是数据可以把它卡成一条链\(\dots\)于是,我们将\(\tt{Tree}\)与\(\tt{heap}\)(堆)合并,以保证平衡树\(\log\)的深度。具体地,我们可以使用旋转操作实现K8He的图
  • 2024-05-23平衡树 Treap & Splay [学习笔记]
    平衡树\(\tt{Treap}\)&\(\tt{Splay}\)壹.单旋\(\tt{Treap}\)首先了解\(\tt{BST}\)非常好用的东西,但是数据可以把它卡成一条链\(\dots\)于是,我们将\(\tt{Tree}\)与\(\tt{heap}\)(堆)合并,以保证平衡树\(\log\)的深度。具体地,我们可以使用旋转操作实现K8He的图
  • 2024-04-21动态树与 LCT
    前面所提到与树有关的数据结构,大部分都是在一棵树上进行的。如果是在森林中连边和删边,就要使用LCT了。LCT可以看作是树链剖分与Splay树的组合,建模中用到了树链剖分,但实际写起来与树链剖分没什么关系,主要用Splay树。它的平摊时间复杂度为\(\mathcal{O}(\logN)\)。1LCT
  • 2024-04-20ABC350题解(E-G)
    E直接搜一下\(N\)的可能到达的值的个数,发现不多(大约\(10^4\)个),直接暴力dp(记忆化搜索)。转移式\(f_i=\max(X\log_{A}N,\dfrac{\sum\limits_{j=1}^6f_{i/j}}{6}+Y)\)。化简得到\(f_i=\max(X\log_{A}N,\dfrac{\left(\sum\limits_{j=2}^6f_{i/j}\right)+6Y}{5})\)。F文艺
  • 2024-04-14Splay 学习笔记
    为了LCT制造了一个Splay……Splay还是一种二叉排序树。我们想让他支持查询结点,删除结点等等。但是普通BST复杂度难以保证,于是Splay出现了。【引入】Splay的思想和并查集的路径压缩类似。并查集的路径压缩允许出现一两次复杂度高的操作,但是经历过一次后就不会再有第二
  • 2024-04-09Splay 板子
    普通:bool_Start;#include<bits/stdc++.h>usingnamespacestd;#defineilinline#defineTptemplate<typenameT>#defineTstemplate<typenameT,typename..._T>Tpilvoidread(T&x){ x=0;boolf=0;charc=getchar(); for(;!isdigit(c)
  • 2024-03-07【学习笔记】 - 基础数据结构 :Link-Cut Tree(进阶篇)
    前言LCT没题写可以去写树剖和一些线段树合并的题练手LCT的概念原本的树剖是对树进行剖分,剖分为重边和轻边LCT则是对于树分为虚边和实边,特殊的,LCT可以没有虚边(例:银河英雄传说v2)单独被包含在一个实链里的点称作孤立点在树剖中,我们使用线段树/树状数组来维护重链在Link-Cut
  • 2024-02-27Link-cut tree 略解
    一些前言每次做树剖时打开题解...使用LCT简单维护即可。内心:???code好√8短啊又很奇怪有种不知道却又高端大气的感觉这次来说清楚LCT到底是个什么东东问题引入例题传送门有一棵树,需要支持操作:修改节点\(u\tov\)路径值查询节点\(u\tov\)路径值很明显,这是
  • 2024-02-23【学习笔记】 - 基础数据结构 :Link-Cut Tree
    发现树剖代码太长了,给我恶心坏了学个代码短点的能写树剖题的数据结构吧前置知识平衡树splay树链剖分简介以及优缺点介绍Link-CutTree,也就是LCT,一般用于解决动态树问题Link-CutTree可用于实现重链剖分的绝大多数问题,复杂度为\(O(n\logn)\),看起来比树剖的\(O(n\lo
  • 2024-02-09Link Cut Tree模板(从别人那里拿的)
    可以通过这道题#include<bits/stdc++.h>#defineRregisterint#defineIinlinevoid#defineGif(++ip==ie)if(fread(ip=buf,1,SZ,stdin))#definelcc[x][0]#definercc[x][1]usingnamespacestd;constintSZ=1<<19,N=3e5+9;charbuf[SZ],*ie=buf+SZ,*ip=
  • 2024-02-05【算法】LCT
    参考资料OI-Wiki:LCTFlashHu:LCT总结——概念篇前言第一次学,感觉这玩意挺抽象……只能写下博客巩固一下印象。概念前置知识:树链剖分,Splay给定一棵树,没有任何的更改操作,询问一些有关树上路径问题(如两点之间的权值和),就可以用树上倍增。而如果在此基础上增添了更改某个点
  • 2024-01-30Splay 树
    Splay树定义Splay是一种高效的BST,平摊复杂度为\(O(\logn)\),可以快速访问热数据rotate+splay精华部分splay双旋一字旋:先fa再x之字旋:先x再fa旋根操作:最麻烦的地方,注意y每次循环要给他赋值voidrotate(intx){ inty=t[x].fa,z=t[y].fa,k=t[y].son[1]==x; t[y].son[k
  • 2024-01-25Link-cut Tree
    这可能是我第一次学数据结构如此绝望链剖分重链剖分使用静态数据结构维护实链剖分(LCT)使用splay维护对每个节点,选择一个儿子作为实边,其他为虚边实链用splay维护虚边认父不认子,连接两个splay长链剖分查询修改链上信息随意换根动态维护连通性LCT核心操作access(x)从指
  • 2023-12-14LCT 学习笔记
    引子在古老且美妙的数据结构王国,一次,一个巨大的怪兽出现在了这个国家,这个怪兽是一棵树,打败这个怪兽只需要能快速求出这个怪兽任意一条路径上的和就可以了,可是他灵活多变,自己的手脚可以调换位置,或拿下来(边可以断掉或连上)身上的每一寸肌肤都可改变其硬度(点可以修改值)树链剖分找到
  • 2023-12-07Splay 伸展树扩展应用
    Update2023.5.27好吧,lxl好像已经发明过这种数据结构了(悲)。前言谈谈扩展Splay。(下文用KzSplay代替)前置知识:1.Splay,以及文艺平衡树。2.线段树。问题引入请你设计一种数据结构,支持在线处理以下操作:给定一个长度为\(n\)的序列\(a\)。1.支持序列的区间翻转。2.支持
  • 2023-12-06Splay/LCT 学习笔记
    唔,其实我不会Splay,但是我会LCT。众所周知,会LCT和会Splay是两回事,因为LCT只需要旋至根即可。到现在还是不会,但是先把LCT的Splay写一下吧。自己复习用的。先给代码。LCTcodeintisroot(intx){returnch[fa[x]][0]!=x&&ch[fa[x]][1]!=x;}intidt(intx){retur
  • 2023-11-16
    寄CSP-2023理论然而:历史意义:2023NOIP再见。3FE名场面T2T3T4其实还有GDOI普及组的zuoji与zouji……splay与暴力两小时splay爆0,2分钟暴力AC。
  • 2023-10-24splay + 垃圾回收 知识点与例题的简要讲解
    splay简要讲解前置芝士:普通二叉树splaytree是一个越处理越灵活的数据结构,通过splay(伸展)操作,使整棵树的单次查询时间复杂度接近于O(logn),整棵树的高度也接近于logn根据上面的这句话,很明显能看出splay与普通二叉树的区别普通二叉树经过多次处理后,很容易退化成链,单
  • 2023-10-23Splay 学习笔记
    Splay概述Splay也称伸展树,是二叉搜索树(BST)的一种近似平衡的类型,由DanielSleator和RobertTarjan于1985年发明。有着极其优秀的复杂度(均摊\(O(log_2n)\))。可以实现Splay(旋转某节点到根),Split(分裂),Merge(合并),Insert(插入),Delete(删除),Get_Rank(根据权值找排名),Get_N
  • 2023-10-23【数据结构】Splay 树
    SplaySplay树(伸展树),是平衡树的一种,而且可以维护序列,进行一些序列操作。有些序列操作功能甚至是线段树实现不了的(经典的区间翻转)。维护集合时,Splay的中序遍历单调递增,而维护序列时,Splay的中序遍历是维护的序列。Splay通过均摊(势能分析)来保证复杂度正确,单次插入,删除,查找操作