splay好板子】的更多相关文章

找到一份比较好的板子,链接https://blog.csdn.net/crazy_ac/article/details/8034190 #include<cstdio> #include<cstdlib> ; #define L ch[x][0] #define R ch[x][1] #define KT (ch[ ch[rt][1] ][0]) ; int lim; struct SplayTree { int sz[maxn]; ]; int pre[maxn]; int rt…
splay的板子.. 由于被LCT榨干了..所以昨天去学了数组版的splay,现在整理一下板子.. 以BZOJ3224和3223为例题..暂时只有这些,序列的话等有时间把维修序列给弄上来!! BZOJ 3224 平衡树的操作 #include <bits/stdc++.h> #define INF 0x3f3f3f3f #define full(a, b) memset(a, b, sizeof a) using namespace std; typedef long long ll; inl…
Preface 由于我怕学习了Splay之后不直接写blog第二天就忘了,所以强行加了一波优先级. 论谁是天下最秀平衡树,我Splay第一个不服.维护平衡只靠旋转. 一言不合转死你 由于平衡树我也介绍了两种Treap&&Scapegoat Tree,所以一些互通的东西也不讲了. 这次的亮点主要是为了弥补Splay的巨大常数(据说是96),我把大量的函数都写成了迭代版本. 废话不多说开讲. 维护平衡的方式--旋转 关于旋转操作,在Treap的那篇文章中已经讲的比较详细了. 但是注意一下Spl…
题面 传送门 题解 鉴于最近的码力实在是弱到了一个境界--回来重新打一下Splay的板子--竟然整整调了一个上午-- //minamoto #include<bits/stdc++.h> #define R register #define inline __inline__ __attribute__((always_inline)) #define fp(i,a,b) for(R int i=(a),I=(b)+1;i<I;++i) #define fd(i,a,b) for(R i…
BST(二叉查找树)是个有意思的东西,种类巨TM多,然后我们今天不讲其他的,我们今天就讲splay 首先,如果你不知道Splay是啥,你也得知道BST是啥 如上图就是一棵优美的BST,它对于每个点保证其左子树内所有点小于自己,右子树内所有点大于自己,而且这棵树高只有\(\log n\),所以找一个点只需要\(O(\log n)\)的时间 但是如果这个图长得极端一点就会变成这样-- 这棵树就非常的不优美,每次查找的复杂度为\(O(n)\),然后就\(O(n^2)\)了-- 然后各种大佬们为了解决这…
理性的整理了一下自己的不足. 计算几何啥都不会,字符串类DP毫无练习,数据结构写的不熟,数论推不出式子,网络流建模常建残: 需要达成的任务: 一.网络流: 熟练网络流的板子(之前一直仰慕zkw费用流,直到今天知道不是万能的坑爹..) 对网络流的建模,进行一次汇总性的总结和学习. 二.Splay 换板子啦..熟练掌握板子. 启发式合并并未经过练习,加以强化 三.主席树 之前好久写的主席树,快忘光了,重新拾起 四.LCT 虽然会写了,但并不能达到完全理解,主要是要理解 涉猎一些相关的题,总结一些实现…
题目描述 有n个人,每个人手里有一把手枪.一开始所有人都选定一个人瞄准(有可能瞄准自己).然后他们按某个顺序开枪,且任意时刻只有一个人开枪.因此,对于不同的开枪顺序,最后死的人也不同. 输入 输入n人数<1000000 每个人的aim 输出 你要求最后死亡数目的最小和最大可能 样例输入 8 2 3 2 2 6 7 8 5 样例输出 3 5题解 这道题--说来话长了这就.考试的时候,一画样例明显是个图论题,出了环明显要缩点,缩了点明显还有一堆什么玩意,打着打着就忘了还有疯子自杀来着= =.不算自杀…
刚学平衡树,分别用了Splay和fhq-treap交了一遍. 这是Splay的板子,貌似比较短? Splay #include <iostream> #include <cstdio> #include <cstring> #include <algorithm> using namespace std; const int N = 100005, INF = 2e9; int n; int nid, root; int fa[N], ch[N][2]; i…
从这里开始 动态树问题和Link Cut Tree 一些定义 access操作 换根操作 link和cut操作 时间复杂度证明 Link Cut Tree维护链上信息 Link Cut Tree维护子树信息 小结 动态树问题和Link Cut Tree 动态树问题是一类要求维护一个有根树森林,支持对树的分割, 合并等操作的问题. Link Cut Tree(林可砍树?简称LCT)是解决这一类问题的一种数据结构. 一些无聊的定义 Link Cut Tree维护的是动态森林中每棵树的任意链剖分. P…
题目传送门 借这道题练一下Treap和Splay的板子. code: #include <cstdio> #include <cstdlib> using namespace std; int read() { ')&&c!='-'); ,y=;c==:x=c-'; +c-'; return x*y; } ],b[]; ,tr[][],v[],f[],rd[]; ; void rotate(int &x,int o) { int k=tr[x][o]; tr…
此生无悔入OI(话说上次的“此生无悔”还是在B站上发的弹幕2333. $HZOI$们,我们要加油!QwQ (挖坑 写在前面 学了一年,拿了$160$,也无所谓,失败者不会被人记住. 最后想做的,就是把这篇游记写好吧. 序 因为这几天发生了挺多事,所以为了条理清晰,本篇游记计划分别以几条线讲述. 以下是正常版. Day -1 考前当然是大家期待的天皇信心赛.苟住了一个$T1$才没爆零.以后自然是颓废+打板子,$letong$说她打完树剖和$Splay$的板子就在路上通过[数据删除]让我颓废.但是显…
description 您需要写一种数据结构(可参考题目标题),来维护一个有序数列,其中需要提供以下操作:翻转一个区间,例如原有序序列是5 4 3 2 1,翻转区间是[2,4]的话,结果是5 2 3 4 1 analysis 我他妈终于会\(splay\)翻转板子了 注意翻转标记不用整条链下传,只需查找时交换儿子节点 注意下标和存储值是不一样的 code #pragma GCC optimize("O3") #pragma G++ optimize("O3") #i…
开始学习新知识:splay——tree 是个板子题,学习splay可以看博客 https://blog.csdn.net/Clove_unique/article/details/50630280 #include<iostream> #include<cstring> #include<cstdio> using namespace std; #define MAXN 1000000 ],f[MAXN],size[MAXN],cnt[MAXN],key[MAXN];…
原题 给出一个n个数的数列ai ,对于第i个元素ai定义\(fi=min(|ai-aj|) (1<=j<i)\),f1=a1,求\(/sumfi\) Splay板子题. Splay讲解:http://www.cnblogs.com/mrsheep/p/8110483.html //太懒了-- #include<cstdio> #include<algorithm> #include<cmath> #define which(x) (ls[f[(x)]]==(…
Double Queue 默写splay板子 很多细节问题... #include<cstdio> #include<iostream> using namespace std; #define maxn 1000005 int root; ; ],par[maxn]; int cnt[maxn],size[maxn]; int val[maxn],dat[maxn]; void pushup(int x) { size[x]=cnt[x]+size[ch[x][]]+size[c…
1, splay的一些基本操作. 使用前要插入$-INF,+INF$保证每个点的前驱后继存在. $get$函数在$x$存在时, 调用后, 根为$x$, 否则根为$x$的前驱或后继 const int N = 1e6+10; int n, tot, rt, sz; struct { int cnt,sz,fa,ch[2],v; } tr[N]; void pu(int x) { tr[x].sz=tr[tr[x].ch[0]].sz+tr[tr[x].ch[1]].sz+tr[x].cnt; }…
下面给出Splay的实现方法(复杂度证明什么的知道是 nlogn 就可以啦) 首先对于一颗可爱的二叉查找树,是不能保证最坏nlogn的复杂度(可以想象把一个升序序列插入) (二叉查找树保证左子树元素大小都小于根元素大小,根元素大小都小于右子树元素大小,且子树都是二叉查找树) 所以我们需要一些非常巧妙的旋转操作 (ratate)来优化这棵树(并让他改名叫Splay) (图片顺序全反了2333) 1.节点 x 的父节点 y 是根节点.这时,如果 x 是 y 的左孩子,我们进行一次 Zig (右旋)操…
题目: 洛谷也能评测....还有我wa了10多次的记录233 题解: 不要想得太复杂,搞一个全局变量记录一下工资的改变量Delta,这样可以等询问的时候就输出val+Delta,然后插入的时候插入x-Delta 不要想会不会有员工工资一样,直接插入就好,这样省不少代码量. 对于降工资操作,插入一个min-Delta节点,ans+=左子树大小,右儿子作为新的根节点 直接走的员工不要算ans #include<cstdio> #include<algorithm> #include&l…
P3391 [模板]文艺平衡树(Splay) 题目背景 这是一道经典的Splay模板题——文艺平衡树. 题目描述 您需要写一种数据结构(可参考题目标题),来维护一个有序数列,其中需要提供以下操作:翻转一个区间,例如原有序序列是5 4 3 2 1,翻转区间是[2,4]的话,结果是5 2 3 4 1 输入输出格式 输入格式: 第一行为n,m n表示初始序列有n个数,这个序列依次是(1,2, \cdots n-1,n)(1,2,⋯n−1,n) m表示翻转操作次数 接下来m行每行两个数 [l,r][l,…
前言部分 splay是个什么东西呢? 它就是个平衡树,支持以下操作 这些操作还可以用treap,替罪羊树,红黑树,multiset balabala(好像混进去什么奇怪的东西) 这里就只说一下splay(其他的窝不会)(splay窝也不会) 先来几个变量和一些辅助函数: root:当前平衡树的根是那个节点 sz:整个平衡树的大小 ch[x][0]:x的左儿子的编号 ch[x][1]:x的右儿子的编号 size[x]:x和它的子树的大小 cnt[x]:编号为x的点的权值出现了几次 par[x]:x…
#1329 : 平衡树·Splay 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Ho:小Hi,上一次你跟我讲了Treap,我也实现了.但是我遇到了一个关键的问题. 小Hi:怎么了? 小Ho:小Hi你也知道,我平时运气不太好.所以这也反映到了我写的Treap上. 小Hi:你是说你随机出来的权值不太好,从而导致结果很差么? 小Ho:就是这样,明明一样的代码,我的Treap运行结果总是不如别人.小Hi,有没有那种没有随机因素的平衡树呢? 小Hi:当然有了,这次我就跟…
历尽艰辛终于A掉了这题QwQ 贴COGS评论区几句话=.= 策爷:"splay/块状链表的自虐题.".深刻理解到如果没有M倾向就不要去写这题了.. -Chenyao2333 记得byvoid的博客上说这个题他当时写了整整一天,我大约写了8个小时?这种长代码程序结构一定要简单简单再简单,否则就是无限的调试了 -QhelDIV 这道题太恶心辣一定要处理好哨兵节点和null节点的数据,update时要注意![没有用哨兵节点的请随意  -wumingshi 这题确实恶心还特喵的是个板子...…
Splay这东西神难打--什么都没动板子敲上就直逼200行了,而且非常难记(仿佛是模板长的必然结果).但是为什么还要学呢?据说是因为它可以实现区间操作.但是自从我得知无旋Treap也能做到这些,默默对比了一下代码长度之后分分钟抛弃Splay啊= =. 和Treap用随机值和左右旋维护平衡不同的,Splay用它的核心操作Splay来维护平衡.所谓的Splay操作可以把任何一个节点旋转到它的一个祖先节点,而旋转分单旋和双旋,双旋需要对比它与父亲是否在各自父亲的同侧.然后每次需要打标记移区间删树之类的…
洛谷题目传送门 关于LCT的问题详见我的LCT总结 思路分析 首先分析一下题意.对于每个弹力装置,有且仅有一个位置可以弹到.把这样的一种关系可以视作边. 然后,每个装置一定会往后弹,这不就代表不存在环么? 于是,一个森林的模型被我们建出来了. 考虑到有修改弹力值的操作,也就是要断边和连边,于是用LCT维护. 思路一 每一个点向它弹到的位置连边.如果被弹飞了,那么这条边就不存在. 查询弹飞的步数,就是查询该点到其所属原树中根节点的路径的\(size\). 注意此题的一些特性.我们并不需要查询或者更…
Pps:终于学会了伸展树的区间操作,做一个完整的总结,总结一下自己的伸展树的单点操作和区间维护,顺便给未来的自己总结复习用. splay是一种平衡树,[平均]操作复杂度O(nlogn).首先平衡树先是一颗二叉搜索树,刚刚开始学的时候找题hash数字的题先测板子... 后来那题被学长改了数据不能用平衡树测了...一道二分数字的题. 二叉搜索树的功能是,插入一个数字,在O(logn)的时间内找到它,并操作,插入删除等.但是可能会让二叉搜索树退化成链,复杂度达到O(n) 而平衡树就是通过一系列操作改变…
https://vjudge.net/problem/HYSBZ-2733 给一些带权点,有些点是互相连通的, 然后给出2种操作,在两点间加一条边,或者询问一个点所在的连通块内的第k小值的编号 并查集辅助+splay的启发式合并就行 由于结构简单,动态开点线段树合并也可以做 我写的是splay,由于一个奇怪的bug,我一气之下把之前的核心代码里的我自己写的splay和rotate代码全换成板子了 #include <bits/stdc++.h> #define endl '\n' #defin…
Splay 参考:https://tiger0132.blog.luogu.org/slay-notes 普通模板: ; ], val[N], cnt[N], fa[N], sz[N], lazy[N], ncnt = , rt = ; int n, m; inline int ck(int x) { ] == x; } inline void push_up(int x) { sz[x] = sz[ch[x][]] + sz[ch[x][]] + cnt[x]; } ///区间反转 inlin…
板子题,正在努力看懂板子.. http://blog.csdn.net/acm_cxlove/article/details/7815019 http://www.cnblogs.com/kuangbin/archive/2013/04/21/3034081.html #include <cstdio> #include <cstring> #include <algorithm> #define keyTree (ch[ ch[root][1] ][0]) #defi…
来自蒟蒻 \(Hero \_of \_Someone\) 的 \(LCT\) 学习笔记 最近学了一波 \(LCT\) , 于是怒刷 \(LCT\) 合集...... $ $ 学的时候借鉴了 Clove_unique的博客 以及 PoPoQQQ的PPT 写得很详细,初学者可以去看看... $ $ 先甩一道板子题... $ $ 辣鸡得不能再辣鸡的题...只有 \(cut\) 和 \(link\) 操作, 然后就是判连通性... $ $ //made by Hero_of_Someone #inclu…
欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ3224 题意概括 您需要写一种数据结构(可参考题目标题),来维护一些数,其中需要提供以下操作:1. 插入x数2. 删除x数(若有多个相同的数,因只删除一个)3. 查询x数的排名(若有多个相同的数,因输出最小的排名)4. 查询排名为x的数5. 求x的前驱(前驱定义为小于x,且最大的数)6. 求x的后继(后继定义为大于x,且最小的数) 题解 splay模板题. 代码 UPD(2018-03-20):省…