随笔分类 - before 2025.8 / 数据结构
摘要:#include <bits/stdc++.h> #define N 100005 #define inf 1000000000 using namespace std; struct Edge { int v, next; int u; } edge[N]; int tot, head[N]; i
阅读全文
摘要:防止以后复习时忘掉 #include<bits/stdc++.h> using namespace std; struct Tree { int ch[2], fa, val, size; } tree[40001]; int n, X, root; int tot, lef_root, rig_r
阅读全文
摘要:由一个键值二元组 \((k,w)\) 构成。要求 \(k\)满足二叉搜索树的性质,而\(w\) 满足堆的性质。 Treap 是笛卡尔树的一种,Treap 的 \(k\) 是随机的 始终维护右链。 #include <bits/stdc++.h> using namespace std; const
阅读全文
摘要:二维线段树可以维护二维表的信息,(区域和、区域最值等) 内层树和普通线段树一样 #include <bits/stdc++.h> using namespace std; const int N = 1e3 + 5; int n, m; int s; int sum[N][N]; // 外区间查询
阅读全文
摘要:倍增法的核心在于预处理每个节点向上2^k步所能到达的祖先节点,其中k是非负整数。这样,当查询两个节点的LCA时,可以快速地将两个节点跳到同一深度,然后再一起向上跳,直到找到它们的LCA。 板子 #include<bits/stdc++.h> using namespace std; const in
阅读全文
摘要:#include <bits/stdc++.h> using namespace std; const int MAXN = 1e5 + 5; const double alpha = 0.7; struct Node { int l, r, val, size, cnt; bool deleted
阅读全文
摘要:如果我们每添加一个元素都需要记住这个权值线段树的状态,以便于我们对历史的操作,那么如果只使用权值线段树,则我们需要n个权值线段树同时保存状态,对于非常多的元素,我们就需要保存非常多的权值线段树,这样做空间一定会爆炸,而主席树提供了这一功能。 板子 #include<bits/stdc++.h> us
阅读全文
摘要:权值线段树维护的是桶,按值域开空间,维护的是个数。 简单线段树维护的是信息,按个数可开空间,维护的是特定信息。 普通线段树能解决区间最值和区间和问题 权值线段树可以解决数列第k大/小的问题 主席树能解决数列的子区间的第k大/小。 板子 #include <bits/stdc++.h> using n
阅读全文
摘要:定义与原理 定义 无旋式 Treap 本质上是一棵二叉搜索树,每个节点除了存储键值(Key)外,还额外维护一个随机优先级(Priority)。它的键值满足二叉搜索树的性质,即左子树的所有节点键值小于根节点键值,右子树的所有节点键值大于根节点键值;而优先级满足堆的性质,通常是大根堆,即每个节点的优先级
阅读全文
摘要:定义与原理 定义:K-D 树是一种二叉树,它是对数据点在 K 维空间中进行划分的树形数据结构。每个节点表示一个 K 维空间中的超平面,将空间划分为两个子空间,每个子节点对应一个子空间。 原理:K-D 树的构建基于数据点在各个维度上的取值。在构建过程中,会选择一个维度作为划分维度,然后根据该维度上的数
阅读全文

浙公网安备 33010602011771号