随笔分类 - 数据结构
摘要:树链剖分 树剖求LCA 树链部分 重儿子:父结点的所有儿子中子树结点数目最多的结点 轻儿子:父结点中除重儿子以外的儿子 重边:父结点和重儿子连成的边 轻边:父结点和轻儿子连成的边 重链:由多条重边连接而成的路径 整棵树会被剖分成若干条重链 轻儿子一定是每条重链的顶点 任意一条路径被切分成不超过 $\
阅读全文
摘要:分块 分块1 单点查值,区间加值 #include <iostream> #include <cmath> using namespace std; #define int long long const int N = 5e4+10,M = 1000; int a[N],n,m,ed[M],st[
阅读全文
摘要:笛卡尔树 笛卡尔树结构由Vuillmin在解决范围搜索的几何数据结构问题时提出。从数列中构造一棵笛卡尔树可以线性时间完成,需要采用单调栈找到在该数列中的所有最近小数。 笛卡尔树是一种二叉树,每一个结点由一个键值二元组 构成。 满足堆的性质,满足二叉搜索树的性质。 用于解决
阅读全文
摘要:左偏树学习笔记 #include<bits/stdc++.h> using namespace std; const int N = 1e5 + 10; int fa[N],ls[N],rs[N],dist[N],val[N],id[N]; bool del[N]; int n,m,cnt; int
阅读全文
摘要:Treap Treap(树堆)是一种 弱平衡 的 二叉搜索树。它同时符合二叉搜索树和堆的性质,名字也因此为 tree(树)和 heap(堆)的组合。 -oiwiki 二叉搜索树的特点是:左节点比父点大,右节点比父小。 堆的特点是 朴素二叉搜索树的问题。在给朴素搜索树插入一个新节点时,我们需要从这个搜
阅读全文
摘要:起因 最近要写LCA然后忘记了ST表这么写QWQ ST表是什么,ST基于倍增和二进制划分动态规划可以在预处理下回答问题 用于解决可重复问题,如问题 模板题 预处理 设为的最大值,即从开始的
阅读全文
摘要:本文整理自《算法竞赛进阶指南》IO.wiki 线段树一种用来维护区间信息的通用数据结构 线段树可以在 的时间复杂度内实现单点修改、区间修改、区间查询(区间求和,求区间最大值,求区间最小值)等操作。 线段树的建树 通过递归将值划分为大于1的若干个区间,把数列划分为树形结构,通过
阅读全文
摘要:hash表 hash表 存储方式 开放寻址法 拉链法 字符串hash 离散化实际上就是一种特殊的哈希方式【单调递增】 拉链法 如果有一个数是冲突的,用一条链将他们栓起来,像邻接表一样 void insert(int x) { int k =((x % N) + N) % N; e[idx] = x;
阅读全文