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

浙公网安备 33010602011771号