P5055 [模板]可持久化文艺平衡树 链接 luogu 思路 可持久化fhq-treap套一套就行了,pushdown和split都要可持久化,但merge不用可持久.以前以为很难一直没看,就是个板子. 错误 t[++num].sum=x;t[num].val=x; t[++num].sum=t[num].val=x; 这两句话居然不一样. 我靠我靠我靠,调试了一下午. 代码 #include <bits/stdc++.h> #define ll long long using namesp…
题目链接 文艺平衡树的可持久化版,可以使用treap实现. 作为序列使用的treap相对splay的优点如下: 1.代码短 2.容易实现可持久化 3.边界处理方便(splay常常需要在左右两端加上保护结点以防越界,而treap一般不用) 可以分裂合并的treap一般称作无旋treap或FHQ-treap,不过我个人觉得它的结构和普通的treap没什么两样,只是多了个分裂和合并的操作而已... 代码: #include<bits/stdc++.h> using namespace std; ty…
好题. Code: #include<bits/stdc++.h> using namespace std; #define setIO(s) freopen(s".in","r",stdin) namespace fhqtreap{ #define maxn 20000000 #define ll long long int tot,m,tr; int trash[maxn]; int ls[maxn],rs[maxn],rev[maxn],val[m…
题目链接 题意 对于各个以往的历史版本实现以下操作: 在第 p 个数后插入数 x . 删除第 p 个数. 翻转区间 [l,r],例如原序列是 \(\{5,4,3,2,1\}\),翻转区间 [2,4] 后,结果是 \(\{5,2,3,4,1\}\). 查询区间 [l,r]中所有数的和. 做法:可持久化treap 定义 typedef pair<int,int> Pair; 结构体 struct Node { int key, val, l, r, sum, size;// 键值 随机值 左子 右…
在刷了许多道平衡树的题之后,对平衡树有了较为深入的理解,在这里和大家分享一下,希望对大家学习平衡树能有帮助. 平衡树有好多种,比如treap,splay,红黑树,STL中的set.在这里只介绍几种常用的:treap.splay和替罪羊树(其中treap包括旋转treap和非旋转treap). 一.treap treap这个词是由tree和heap组合而成,意思是树上的的堆(其实就是字面意思啦qwq).treap可以说是由二叉搜索树(BST)进化而来,二叉搜索树每个点满足它左子树中所有点权值都比它…
[LG5055]可持久化文艺平衡树 题面 洛谷 题解 终于不可以用\(Trie\)水了... 和普通的\(FHQ\;treap\)差不多 注意一下\(pushdown\).\(split\)要新开节点 代码 #include <iostream> #include <cstdio> #include <cstdlib> #include <cstring> #include <cmath> #include <algorithm> #…
此为平衡树系列第二道:文艺平衡树您需要写一种数据结构,来维护一个有序数列,其中需要提供以下操作: 翻转一个区间,例如原有序序列是5 4 3 2 1,翻转区间是[2,4]的话,结果是5 2 3 4 1 输入 第一行为n,m n表示初始序列有n个数,这个序列依次是(1,2……n-1,n) m表示翻转操作次数接下来m行每行两个数[l,r] 数据保证 1<=l<=r<=n 输出 输出一行n个数字,表示原始序列经过m次变换后的结果 样例输入 5 3 1 3 1 3 1 4 样例输出 4 3 2 1…
题目: 此为平衡树系列第一道:普通平衡树您需要写一种数据结构,来维护一些数,其中需要提供以下操作:1. 插入x数2. 删除x数(若有多个相同的数,因只删除一个)3. 查询x数的排名(若有多个相同的数,因输出最小的排名)4. 查询排名为x的数5. 求x的前驱(前驱定义为小于x,且最大的数)6. 求x的后继(后继定义为大于x,且最小的数) n<=100000 所有数字均在-107到107内. 输入样例: 10 1 106465 4 1 1 317721 1 460929 1 644985 1 841…
直接上代码 正所谓 人傻自带大常数 平衡树的几种姿势:  AVL Red&Black_Tree 码量爆炸,不常用:SBT 出于各种原因,不常用. 常用: Treap 旋转 基于旋转操作和随机数堆 但不支持区间操作. 非旋转 基于随机数堆和拆分合并操作 常数较大 时间复杂度:很难被卡,均摊O(logN) #include<cstdio> #include<iostream> #include<cstdlib> #define MAXN 100005 using n…
题目描述 某一天gty在与他的妹子玩游戏.妹子提出一个游戏,给定一棵有根树,每个节点有一些石子,每次可以将不多于L的石子移动到父节点,询问将某个节点的子树中的石子移动到这个节点先手是否有必胜策略.gty很快计算出了策略.但gty的妹子十分机智,她决定修改某个节点的石子或加入某个新节点.gty不忍心打击妹子,所以他将这个问题交给了你.另外由于gty十分绅士,所以他将先手让给了妹子. 输入 第一行两个数字,n和L,n<=5*10^4,L<=10^9第二行n个数字,表示每个节点初始石子数.接下来n-…