随笔分类 -  高级数据结构

摘要:传送门:高级打字机 看到题目中的撤销操作就可以想到历史版本,不难想到使用可持久化线段树。 难点在于如何维护撤销操作,容易想到可以利用 \(root\) 数组。我们直接把 \(x\) 个操作前的 \(root\) 赋给当前的 \(root\),就可以保证撤销操作。 需要注意的是询问操作需要过滤掉,以保 阅读全文
posted @ 2021-12-19 12:10 一程山雪 阅读(71) 评论(0) 推荐(0)
摘要:第一次接触可持久化数据结构 awa,可以访问修改历史版本,功能比较强大。(尤其在访问历史版本和解决区间排名等问题的方面) 可持久化线段树 传送门:可持久化线段树 并不是很难,使用动态开点,用结构体存一下新开出的左右儿子编号,递归访问。每次修改的时候,新建一个节点并复制原节点信息,然后对于新的节点做修 阅读全文
posted @ 2021-12-19 12:03 一程山雪 阅读(58) 评论(0) 推荐(0)
摘要:传送门:数列找不同 显然一个区间的答案可以 \(O(1)\) 转移到相邻区间,记录每个数的 \(cnt\)。当 \(cnt = 2\) 时,表示多出现了一个相同的,记录增加。同理,当 \(cnt = 1\) 的时候,表示少了一个相同的,记录减少。跑一遍莫队即可,时间复杂度 \(O(n\sqrt n) 阅读全文
posted @ 2021-12-13 16:59 一程山雪 阅读(73) 评论(0) 推荐(0)
摘要:暴力,因分块而优雅,因莫队而芳华。 形式 对于序列上的区间询问问题,如果从 \([l,r]\) 的答案能够 \(O(1)\) 扩展到 \([l,r+1]\),\([l,r-1]\),\([l-1,r]\),\([l+1,r]\)(即与 \([l,r]\) 相邻的区间)的答案,那么可以在 \(O(n\ 阅读全文
posted @ 2021-12-13 15:55 一程山雪 阅读(87) 评论(0) 推荐(0)
摘要:传送门:宠物收养所 可以考虑只维护一棵 Splay,随时判断宠物和领养者谁多,把多的插入到 Splay 里,类似营业额统计,对于新加进来的少的求前驱后继并比较谁更近。(注意判断相等的特殊情况,处理按题面来) 然后累计到答案里就可以啦。(reliese 操作删除的是某个值而不是节点编号,只有我这个蒟蒻 阅读全文
posted @ 2021-12-07 14:53 一程山雪 阅读(97) 评论(0) 推荐(0)
摘要:传送门:营业额统计 Splay 练手题,对于营业额维护 Splay。考虑当前节点对于答案的贡献,直接寻找前驱后继并判断谁更近即可,直接累计到答案中。(注意判断是否存在前驱和后继) #include<bits/stdc++.h> using namespace std; const int N = 1 阅读全文
posted @ 2021-12-07 14:48 一程山雪 阅读(77) 评论(0) 推荐(0)
摘要:之前学习 Treap 的时候理解的不是太好,堆性质和 BST 性质结合得不是很好。发现后续知识对于 Splay 是需要掌握的,于是心血来潮学习了 Splay,个人感觉理解的比 Treap 好,以后手写平衡树就用 Splay 啦。 模板题:Splay 开点 比较类似 Treap,只不过不需要随机啦。特 阅读全文
posted @ 2021-12-05 11:26 一程山雪 阅读(93) 评论(2) 推荐(0)
摘要:传送门 糖衣炮弹的左偏树模板,解析见学习笔记。 1 #include<bits/stdc++.h> 2 using namespace std; 3 static inline int read() 4 { 5 char c; 6 int flag = 0; 7 while(not isdigit( 阅读全文
posted @ 2021-11-16 17:30 一程山雪 阅读(38) 评论(0) 推荐(0)
摘要:左偏树是一种能够在支持在 $O(logn)$ 的时间复杂度内进行合并的满足堆性质的树,因此别名“可并堆”,具有可合并与复杂度稳定的优势。 模板题 基本概念与定义 外结点:至少有一个儿子是空节点的节点。 $dist_x$ 表示以 $x$ 为根的子树内到 $x$ 距离最小的外结点的距离。特别的,对于空结 阅读全文
posted @ 2021-11-15 19:07 一程山雪 阅读(66) 评论(0) 推荐(0)