数据结构
binggui2
这个作者很懒,什么都没留下…
展开
-
2021牛客多校第七场 F trees 主席树维护dfs序 每个节点都是一个图
dfs树1是想到了,也想到了dfs过程中需用记录每一个历史节点的图,感觉空间复杂度太高了就没细想。 dfs树1,假设该节点为u。维护树2以u为根的子树中 为u树1的祖先的节点 中深度最深的,记为h[u] 该节点为树1中链底部的答案是dep[u] - h[u]。 主席树按照树2的dfs序维护每个节点的h。 dfs回退节点的时候直接用主席树中的历史节点即可。 主席树上使用懒标记,能不下放时就不下放。 #include <cstdio> #include <cstring> #includ原创 2021-08-11 09:01:51 · 135 阅读 · 0 评论 -
2015沈阳网络赛 C
树上差分 用到了树链剖分的方法求 lca。 这题数据有点弱呀, #include <cstdio> #include <iostream> #include <cstring> #include <algorithm> using namespace std; const int N = 20020, M = 2 * 200020; int n, m; int h[N], e[M], ne[M], idx; int dfs[N], cha[N], d[N]原创 2021-03-03 14:55:46 · 87 阅读 · 1 评论 -
单调栈与单调队列
单调栈 题意: 对于一个数组中每一个数来说,找到其左面第一个小于该点的值。 很容易想到是单调栈,可是为什么用单调栈呢? 证明: 我们对[a b] c {d0, d1, d2 ...}来说,已知a < b & b > c,对于c后面数字进行分析。 c后数字如果大于c,有可能答案是c,但答案不可能是b。 那么对于c后的数字来说b是没必要存在的,可以由c来代替。 对于{}也就是待分析数字前,应该是单调递增的, 且可支持单侧(挨着{}的方向)动态更新递增数组,即把b用c代替。 抽象完模型后为单调原创 2021-01-01 21:27:26 · 76 阅读 · 0 评论 -
线段树
线段树 区间的性质是可以进行分解的, 大的区间的性质可以由小的区间的性质进行转换 最大数 建树(build) 利用最大长度进行建树,利用数组或者结构体的编号去建树,标明左右节点的编号 访问(query) 利用递归去访问以该节点为根节点的子树 修改(modify) 递归继续修改,从底向上,当每一次进行完递归操作后进行一次pushup操作更新该点的值 pushup 用该节点的 子节点 去更新该节点的值 ( a << 1) + 1 == a << 1 | 1 a << 1 +原创 2020-09-23 14:29:20 · 67 阅读 · 0 评论 -
哈希表
拉链法 就是链式前向星,或者是单链表 直接用一种方法进行映射, 如果出现重复的值,用链式前向星去存储 #include <cstdio> #include <iostream> #include <algorithm> #include <cstring> using namespace std; const int N = 100010, mod = 100003; int h[N], e[N], ne[N], idx; void add(int a)原创 2020-09-18 08:05:40 · 118 阅读 · 0 评论