ICode9

精准搜索请尝试: 精确搜索
  • 【随笔浅谈】splay 时间复杂度简要分析2021-08-30 07:00:43

    势能分析 在数据结构问题中,我们往往难以估计第 \(i\) 次的实际时间开销 \(t_i\)。 所以我们要引入一些势能分析的概念: 设 \(\phi_i\) 表示:第 \(i\) 次操作过后,数据结构的势能值。 记 \(a_i = t_i + \phi_i - \phi_{i - 1}\),即第 \(i\) 次操作的均摊时间。 注意:确定势能值的势函

  • Splay2021-08-20 22:31:46

                                           板子题:P3369 【模板】普通平衡树 题目链接:https://www.luogu.com.cn/problem/P3369 1 #include<bits/stdc++.h> 2 using namespace std; 3 const int N=5e5+11,inf=1<<29; 4 int n,T,root,tot; 5 6 in

  • [模板] 动态树 LCT2021-08-12 18:32:15

    [模板] 动态树 LCT 今天终于把这东西学会了。 比大模拟还难写。 概念类 Link-Cut-Tree 是用来解决 动态树 问题的一种数据结构。 类似于轻重链剖分,这里使用 虚实链剖分 ,同时利用 Splay 灵活多变的性质来维护动态操作,其中 每一条实链都用一棵 Splay 来维护。(也叫作 Auxiliary T

  • [数据结构] Splay2021-08-12 18:31:42

    [数据结构] Splay 与 Treap 相比,并没有堆性质的限制,而是通过其灵活变换维持复杂度。 是均摊 \(\text O(logn)\) 的数据结构。 本来 Zhang_RQ 早就讲了,今天才学会 概念类 需要维护的 基本 东西有: 左右儿子,父亲,权值,一般会维护 \(sz\) 和 \(cnt\),便于进行二分操作。 基本操作 P3

  • 浅谈 LCT2021-08-05 20:31:36

    实链剖分和树链剖分的区别 树链剖分有一个更专业的名称 :轻重链剖分,即为根据子节点的子树大小来剖,虽然树链剖分有很好的性质 ,但是还是存在缺陷的。例如 : 树链剖分将树剖完之后是静态的,(无法进行修改了,但不代表就不能换根了。)也就是说树链剖分只能针对于树的结构不变的情况下操作。

  • P3391 【模板】文艺平衡树 题解2021-08-03 18:32:26

    描述: 给定 \(1\) 个长度为 \(n\) 的区间,有 \(m\) 次操作,每次反转区间 \([l,r]\) , 求最后的序列。 思路: 区间操作,可以用平衡树中的 Splay 来解决。 不会平衡树的同学可以点这里: \(\mathtt{BST}\) 学习笔记 \(\mathtt{Splay}\) \(\mathtt{Treap}\) 下文默认会 Splay 的基础操

  • P4146 序列终结者(Splay树)2021-07-31 21:01:49

    给出一个初始为0的序列。 询问区间最大值,并同时支持区间修改和区间翻转。 就正常模仿线段树,给Splay打懒标记即可。 巨大的坑就是要保证虚拟节点,0,1,n+2不对答案产生影响。 这里把他们的权值和区间值全置为负无穷。 //区间修改 //区间反转 //区间求MAX #include<bits/stdc++.h> using

  • 学习笔记——Splay2021-07-30 21:34:08

    前言 前几天有幸听学长讲平衡树,想着好久没写博客了,记录一下。 简介 Splay,平衡树的一种,依靠每次将访问到的点旋到根来保持树的平衡。 并且,Splay 还可以高效解决序列翻转等操作。 实现 前提 以下代码是基于这样的定义的: struct Tree{int ch[2],val,siz,fa;}nd[MAXN];//表示某一个节

  • 文艺平衡树2021-07-26 15:02:20

    文艺平衡树 之前我用分块乱搞过文艺平衡树,今天一起来看看如何用平衡树实现文艺平衡树。 题目描述: 给你长度为 \(n\) 的序列 \(A\) ,初始时 \(A_i=i\) ,有 \(m\) 次操作,每次对给定区间 \([l,r]\) 进行翻转。 要求输出 \(m\) 次操作以后的序列。 实现文艺平衡树有三种思路:Splay,FHQ-Tre

  • 题解[CF916E Jamie and Tree]2021-07-13 11:00:36

    题目链接 对这种方法更加详细的介绍与时间复杂度分析: cnblog 洛谷blog 这里介绍一种能够保证时间复杂度的魔改 \(LCT\) 的做法,并非 \(AAAT\) 回想 \(LCT\) 的局限性就是不能维护子树标记 那就可以想到用一个数据结构专门维护每个点的虚儿子 平衡树时空复杂度都表现优秀,那就可以想

  • Splay入门2021-07-12 22:04:19

    0. 前言 前置知识:二叉查找树。 我们知道,二叉查找树是会被恶意数据卡成\(O(n^2)\)的。(如下图) 这很显然不是我们想要的,我们需要找到一种方法来让树保持平衡。 于是我们就有了各式各样的平衡树,而在OI中应用最为广泛的就是Splay和fhq_treap了, 并且这两个数据结构互相不能替代。 Spl

  • Splay 板子2021-07-08 08:31:51

    以后我将Splay称为Dplay! #include <bits/stdc++.h> using namespace std; #define INF 0x7fffffff #define N 100010 #define ll long long #define ld long double #define usd unsigned #define ull unsigned long long //#define int long long #define getchar() (p1=

  • 集训总结2021-06-14 09:02:05

    6.3放完假,这天正好做完了分块莫队的最后一个题,于是就开始学习线段树合并。 线段树合并有一部分题就是由dfs实现的先记录下子叶答案,再合并到父亲, 线段树一直做到了6.6开始考试,一开始考试部分题有思路,但是代码实现出现了问题,例如模拟4的高斯消元 还有的题不太敢实现自己的做法,考完了

  • 洛谷P3871 [TJOI2010]中位数(splay)2021-06-04 23:57:10

    题目描述 给定一个由N个元素组成的整数序列,现在有两种操作: 1 add a 在该序列的最后添加一个整数a,组成长度为N + 1的整数序列 2 mid 输出当前序列的中位数 中位数是指将一个序列按照从小到大排序后处在中间位置的数。(若序列长度为偶数,则指处在中间位置的两个数中较小的那个) 例1:1 2

  • BZOJ1014: [JSOI2008]火星人prefix(splay 二分 hash)2021-06-04 22:02:36

    Sol一眼splay + 二分hash,不过区间splay怎么写来着呀试着写了两个小时发现死活不对看了一下yyb的代码发现自己根本就不会splay。。。。// luogu-judger-enable-o2 #include#define ull unsigned long long  using namespace std; const int MAXN = 1e6 + 10; const u

  • luogu P3391 【模板】文艺平衡树(Splay)2021-05-29 19:56:11

    嘟嘟嘟 突然觉得splay挺有意思的…… 这道题只有一个任务:区间翻转。 首先应该知道的是,splay和线段树一样,都可以打标记,然后走到每一个节点之前先下传。 那怎么打标记呢?还应该有“区间”的思想。 对于区间\([L, R]\),想办法把这个区间所在的子树提取出来,然后打个标记即可。 那怎么提

  • UESTC2021暑假前集训(splay树)2021-05-20 23:04:37

               关于splay的教程可以在哔站上查询我校前辈算法讲堂 然后代码对标的是两篇博客(实际上是一种姿势,因为这种代码姿势非常的优美) Splay入门解析【保证让你看不懂(滑稽)】 - 小蒟蒻yyb - 博客园 (cnblogs.com)   Splay树详解 - 秦淮岸灯火阑珊 - 博客园 (cnblogs.com)

  • 洛谷 P3391 【模板】文艺平衡树(Splay)2021-05-20 22:56:57

    题目背景 这是一道经典的Splay模板题——文艺平衡树。 题目描述 您需要写一种数据结构(可参考题目标题),来维护一个有序数列,其中需要提供以下操作:翻转一个区间,例如原有序序列是5 4 3 2 1,翻转区间是[2,4]的话,结果是5 2 3 4 1 输入输出格式 输入格式: 第一行为n,m n表示初始序列有n个数

  • 在洛谷3369 Treap模板题 中发现的Splay详解2021-05-20 22:55:36

    本题的Splay写法(无指针Splay超详细)前言首先来讲。。。终于调出来了55555。。。调了整整3天。。。。。看到大部分大佬都是用指针来实现的Splay。小的只是按照Splay的核心思想和原理来进行的。可能会有不妥之处,还请大佬们指出,谢谢!那么这个题解存在的意义就是让不会敲Splay的人额。。

  • [HNOI2010]弹飞绵羊2021-05-05 22:36:04

    考虑这是一个\(LCT\)模板题。 感觉得多做一些题来熟悉\(LCT\)的操作。 这个题考虑对每个点向他往后跳的终点,如果会出界就不连边。 然后考虑\(LCT\)维护,也就是查询该点到原树根的距离。 那就\(access\),\(splay\),然后查询\(x\)的子树大小就行了。 断边的话,因为保证了树结构而且断的

  • Link-Cut Tree(LCT)2021-04-16 20:01:12

    目录Link-Cut Treeaccess例子操作方法代码make_root例子操作方法代码push_down & push_hall代码find_root操作方法代码Split操作方法代码link操作方法代码cut操作方法代码模板代码例题Tree II树点涂色Matches Are Not a Child's Play Link-Cut Tree 在LCT中,对于一棵树,用到了实链剖

  • LCT板子2021-04-09 08:32:09

    推荐:https://www.cnblogs.com/flashhu/p/8324551.html 分析 用来处理有删边但没有子树操作的问题 模板 inline bool nrt(int x) { //判断x是否为splay中的根,认父不认子 return c[f[x]][0]==x||c[f[x]][1]==x; } void rotate(int x) { int y=f[x],z=f[y],k=c[y][1]==x;

  • splay2021-04-05 16:35:37

    splay、treap、set、红黑树、avl、B树 splay: 平衡二叉树,经过左旋和右旋操作,不会改变中序遍历的顺序。维护的是二叉树的一个中序序列,同时调整树的高度。 右旋要变的信息:       在插入和查询操作x的时候,都会把x变到树根的位置。    核心:每操作一个节点,均将该节点旋转到树根

  • P4036 [JSOI2008]火星人2021-03-30 21:33:01

    火星人 每次询问区间中的两个点 \(l,r\) 为起点的字符串的 LCP,支持单点修改和插入。 如果没有后面两个操作,直接 二分 + Hash 维护即可。 在有后面操作的情况下,我们需要一个支持 单点修改 和 插入 的数据结构,显然平衡树可以。 至于 Hash 值,简单 push_up 一下就好了。 #include<cs

  • luogu 5385 [Cnoi2019]须臾幻境2021-03-13 21:01:26

    题面传送门 自环太坑了。 首先如果离线那么显然回滚莫队+并查集就可以愉快地通过了。 但是这个是强制在线的。所以考虑换一种做法。 可以发现联通块个数就是点数减去有用的边数。 我们可以看看对于每个点,从哪个点开始可以被计算入边数。 这个可以用LCT维护时间最大生成树来搞。 然

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有