随笔分类 -  数据结构

摘要:树链剖分 树剖求LCA 树链部分 重儿子:父结点的所有儿子中子树结点数目最多的结点 轻儿子:父结点中除重儿子以外的儿子 重边:父结点和重儿子连成的边 轻边:父结点和轻儿子连成的边 重链:由多条重边连接而成的路径 整棵树会被剖分成若干条重链 轻儿子一定是每条重链的顶点 任意一条路径被切分成不超过 $\ 阅读全文
posted @ 2022-09-12 16:41 Erfu 阅读(31) 评论(0) 推荐(0) 编辑
摘要:分块 分块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[ 阅读全文
posted @ 2022-09-06 10:07 Erfu 阅读(32) 评论(0) 推荐(0) 编辑
摘要:笛卡尔树 笛卡尔树结构由Vuillmin在解决范围搜索的几何数据结构问题时提出。从数列中构造一棵笛卡尔树可以线性时间完成,需要采用单调栈找到在该数列中的所有最近小数。 笛卡尔树是一种二叉树,每一个结点由一个键值二元组 (w,v) 构成。 w满足堆的性质,k满足二叉搜索树的性质。 用于解决 阅读全文
posted @ 2022-08-01 17:34 Erfu 阅读(185) 评论(0) 推荐(0) 编辑
摘要:左偏树学习笔记 #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 阅读全文
posted @ 2022-07-23 16:47 Erfu 阅读(24) 评论(0) 推荐(0) 编辑
摘要:Treap Treap(树堆)是一种 弱平衡 的 二叉搜索树。它同时符合二叉搜索树和堆的性质,名字也因此为 tree(树)和 heap(堆)的组合。 -oiwiki 二叉搜索树的特点是:左节点比父点大,右节点比父小。 堆的特点是 朴素二叉搜索树的问题。在给朴素搜索树插入一个新节点时,我们需要从这个搜 阅读全文
posted @ 2022-07-18 19:40 Erfu 阅读(26) 评论(0) 推荐(0) 编辑
摘要:起因 最近要写LCA然后忘记了ST表这么写QWQ ST表是什么,ST基于倍增和二进制划分动态规划可以在O(nlogn)预处理下O(1)回答问题 用于解决可重复问题,如RMQ问题 模板题 预处理 设f[i][j]f[i][i+2j+1]的最大值,即从i开始的2j 阅读全文
posted @ 2022-07-17 11:46 Erfu 阅读(107) 评论(0) 推荐(0) 编辑
摘要:本文整理自《算法竞赛进阶指南》IO.wiki 线段树一种用来维护区间信息的通用数据结构 线段树可以在 O(logn) 的时间复杂度内实现单点修改、区间修改、区间查询(区间求和,求区间最大值,求区间最小值)等操作。 线段树的建树 通过递归将值划分为大于1的若干个区间,把数列划分为树形结构,通过 阅读全文
posted @ 2022-07-15 15:47 Erfu 阅读(35) 评论(0) 推荐(0) 编辑
摘要:hash表 hash表 存储方式 开放寻址法 拉链法 字符串hash 离散化实际上就是一种特殊的哈希方式【单调递增】 拉链法 如果有一个数是冲突的,用一条链将他们栓起来,像邻接表一样 void insert(int x) { int k =((x % N) + N) % N; e[idx] = x; 阅读全文
posted @ 2022-07-12 22:16 Erfu 阅读(21) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示