随笔分类 - 数据结构
摘要:CF1017G The Tree 给定一棵树,维护以下 $3$ 个操作: 1 x 如果节点 $x$ 为白色,则将其染黑。否则对这个节点的所有儿子递归进行相同操作 2 x 将以节点 $x$ 为根的子树染白。 3 x 查询节点 $x$ 的颜色 $n,q\le 10^5$。 $\bigstar\textt
阅读全文
摘要:CF1004F Sonya and Bitwise OR 有一个长度为 $n$ 的数组 ${a}$,有 $m$ 次操作,又给定一个数 $x$,有两类操作: 1 i y 将 $a_i$ 改为 $y$; 2 l r 查询有多少个区间 $[L,R]$ 满足 $a_{L\dots R}$ 的按位或 $\tt
阅读全文
摘要:主要参考万万没想到 的 FHQ-Treap学习笔记。 本片文章的姊妹篇:平衡树 - Splay 学习笔记。 感觉完全不会平衡树,又重新学习了一遍 FHQ,一口气把常见套路都学完了。 1 大致内容及分类 FHQ(由范浩强发明),全称非旋转 Treap,是一种可以用于维护按权值、排名分裂的数据结构。它相
阅读全文
摘要:主要内容 珂朵莉树是基于数据随机且有整体赋值操作而对序列操作的乱搞算法。 它的主要思想是用 set 维护若干个数值上相同的区间,并暴力处理其他询问。 建立 在 set 中,我们需要用结构体记录每个区间的信息: struct ODT { int l,r; mutable ll val; // muta
阅读全文
摘要:主要内容 昨天(\(\texttt{2022.2.28}\))打 ARC 的 D 题时,恍然发现我不会高维前缀和,匆匆来学一下。 比如二维前缀和 \(s_{i,j}\) 表示在一个二维平面上从 \((1,1)\) 到 \((i,j)\) 的所有点的权值之和,我们定义高维前缀和 \(s_{p_1,p_
阅读全文
摘要:点分治常用于树上路径统计等问题。 点分治 每次分治过程大致如下: 我们先求出当前连通块树的重心; 处理与重心有关的答案; 删除重心 递归处理与重心相连的子连通块。 伪代码如下: void solve(int x) { Find1(x,0),Find2(x,0); // 找到重心 rt // 处理和
阅读全文
摘要:Normal Data Structure Tricks 即 Data Structure 做题记录。 放一些比较常见的数据结构处理技巧,会一点一点补上来。 P3313 [SDOI2014]旅行 给你一个 $10^5$ 长的序列,每个点有颜色 $c$ 和权值 $v$。 有修改和查询操作,修改可以为修
阅读全文
摘要:P4211 [LNOI2014]LCA 题意 给出一个 \(n\) 个节点的有根树(编号为 \(0\) 到 \(n-1\),根节点为 \(0\))。 一个点的深度定义为这个节点到根的距离 \(+1\)。 设 \(dep[i]\) 表示点 \(i\) 的深度,\(LCA(i,j)\) 表示 \(i\)
阅读全文
摘要:线段树模板 P3372 【模板】线段树 1 P3373 【模板】线段树 2 (远古代码了,还在用指针) 注意 $pushdown$ 操作的优先级: 儿子的值 $=$ 此刻儿子的值 $\times$ 爸爸的乘法 $lazy~+$ 儿子的区间长度 $\times$ 爸爸的加法 $lazy$ 即:先下传
阅读全文
摘要:笛卡尔树 优美的性质 对于一个序列建立的笛卡尔树满足: 它是个二叉树。 下标的中序遍历为 \(1\) 到 \(n\) 的序列。 权值满足小根堆性质。 若权值互不相同,那么这个序列的笛卡尔树唯一(当然,若权值相同,就会有很多棵树,于是就有笛卡尔树计数啦)。 它具有这么多优秀的性质,当然可以干很多事情啦
阅读全文
摘要:蒟蒻比较菜,现在才学。。。 P3402 可持久化并查集 其实就是魔改的主席树啦,记录每个点的直接父亲与这棵子树的大小。 合并的时候不用路径压缩,直接暴力跳父亲,\(O(\log^2)\) 找到祖先,之后启发式合并(启发式合并的平均复杂度达到 \(O(\log n)\))。 需要注意的是可能会先继承删
阅读全文
摘要:主要内容 李超线段树可以用来维护平面上的线段(但是要求 $x$ 或 $y$ 其中一维比较小,在 $10^5$ 及以内)。 李超树核心是记下每一段区间的最优线段: 一条线段能成为区间 $[l,r]$ 中的最优线段,当且仅当: 该线段的定义域完整覆盖了区间 $[l,r]$ ; 该线段在区间中点处最优。
阅读全文
摘要:二维树状数组可以实现在平面上的区域加、区域查询等操作。 区域修改 我们在一维时维护树状数组的区间操作时,对其进行了差分。类比一维的思想,我们在二维平面上也对树状数组差分。 我们来看二维的前缀和: \(sum(i,j)=sum(i-1,j)+sum(i,j-1)-sum(i-1,j-1)+a(i,j)
阅读全文
摘要:(来源:XJ高质量原创题) 原题地址 弱化版:CF526F Pudding Monsters 弱化版 题意:\(n\times n\) 的棋盘上有 \(n\) 颗棋子,每行每列都有且仅有一颗棋子,求出有多少个 \(k\times k\) 的子棋盘也满足每行每列只有一颗棋子。 将棋盘的 \(x\) 轴
阅读全文
摘要:将较长的链剖出来,通过共用数组的方式来实现优化。 注意!!! 【指针版长链剖分】循环遍历儿子们的答案时, for(int j=0;j<len[ver[i]];j++)... 而不是(因为申请了长度为 \(len\) 的数组!!) for(int j=0;j<=len[ver[i]];j++)...
阅读全文
摘要:咕咕咕 二分查找树( BST ) \(\operatorname{BST}\) 树满足性质: 每一个节点关键码 不小于 它 左子树中 任意节点关键码。 每一个节点关键码 不大于 它 右子树中 任意节点关键码。 整棵树 中序遍历单调递增 。 建立:由两个节点( \(+inf~\&~-inf\) )构成
阅读全文
摘要:set 底层实现是用红黑树。 set 建立 set<int> s; // 不可重,默认升序 set<int,less> s; // 不可重,升序 set<int,greater> s; // 不可重,降序 multiset<int> s; // 可重集 set 也可以重载,利用结构体实现。 重载方式
阅读全文
摘要:ST表 \(\text{ST}\) 表是用于解决可重复贡献问题的数据结构。 可重复贡献问题:区间按位和、区间按位或、区间 \(\gcd\) 、区间最大、区间最小等满足结合律且可重复统计的问题。 模板预处理:(以区间最大值为例) void pre_work() { for(int i=2;i<=n;i
阅读全文
摘要:模板 P3834 【模板】可持久化线段树 2(主席树) 区间求第 \(k\) 大 模板代码 #include<bits/stdc++.h> using namespace std; #define Maxn 200005 typedef long long ll; inline int rd() {
阅读全文

浙公网安备 33010602011771号