随笔分类 - 数据结构 - 可持久化数据结构
摘要:模板题,刷点数据结构 ~ code: #include <bits/stdc++.h> #define N 600009 #define setIO(s) freopen(s".in","r",stdin) using namespace std; int rt[N],sum[N],tot; str
阅读全文
摘要:因为题中的操作是区间加法,所以满足前缀相减性. 而每一次查询的时候还是单点查询,所以直接用可持久化线段树维护差分数组,然后查一个前缀和就行了. code: #include <bits/stdc++.h> #define N 200004 #define LL long long #define s
阅读全文
摘要:维护一个二维零一矩阵(n,m<=1000),支持四种操作(不超过10^5次): 将(i,j)置一 将(i,j)置零 将第i行零一反转yu 回到第K次操作前的状态 每次操作后输出全局一共有多少个一 你发现如果每一次操作都复制一整行的话是可以用 $bitset$ 优化的,自带/32 所以,我们对于每一个
阅读全文
摘要:联通块个数等于 $n$ 减掉关键边个数. 这里定义关键边为:能连接两个连通块的边. 由于强制在线,我们考虑用一种数据结构维护以 $r$ 为右端点的答案. 考虑已经构建好 $1$ ~ $r-1$ 的图,那么假如 $r$ 时分两种情况: 1. $r$ 连接的两个点没有联通,那么就将这两个点连上. 2.
阅读全文
摘要:建出来 $Kruskal$ 重构树. 将询问点向上跳到深度最小,且合法的节点上. 那么,得益于重构树优美的性质,这个最终跳到的点为根的所有子节点都可以与询问点互达. 对于子树中求点权第 $k$ 大的问题,直接对 $dfs$ 序建主席树即可.
阅读全文
摘要:把 $Noi2018$ day1t1 想出来还是挺开心的,虽然是一道水题~ 预处理出来 1 号点到其它点的最短路,然后预处理边权从大到小排序后加入前 $i$ 个边的并查集. 这个并查集用可持久化线段树维护可持久化数组来完成. 每次询问时在边集上二分一下,找到对应的并查集,然后找到祖先并输出极小值即可
阅读全文
摘要:Code:
阅读全文
摘要:Code:
阅读全文
摘要:题目描述: 求区间 $mex$ 值. 题解:用主席树维护每个点出现的最靠右的位置. 当我们查询区间 $[l,r]$ 时,只需看一下 $[0,n]$ 在 $rt[r]$ 的线段树下每个点出现的最靠右的位置的最小值是否小于 $l$ 若小于 $l$ ,则一直贪心在线段树上向左走,直到走到叶子节点为止.
阅读全文
摘要:前几周考试的时候考了,正解给的是线段树套堆(专门卡这个做法的空间). 这里先写一下可持久化线段树的做法(应该是官方正解吧). 搞两个线段树,一个维护的是权值(查询答案时调用的). 另一个维护的是每个下标在每一个操作时刻被哪个操作在顶上覆盖着(这是一个可持久化线段树). 这样做有什么好处呢 ? 我们举
阅读全文
摘要:Description M公司是一个非常庞大的跨国公司,在许多国家都设有它的下属分支机构或部门。为了让分布在世界各地的N个 部门之间协同工作,公司搭建了一个连接整个公司的通信网络。该网络的结构由N个路由器和N-1条高速光缆组成。 每个部门都有一个专属的路由器,部门局域网内的所有机器都联向这个路由器,
阅读全文
摘要:这个是满分做法, 68pts 做法在上一篇博客中 会 68 pts 做法后就十分简单了,只要来一遍线段树合并 right 集合并在匹配的时候判一下是否在 $[l,r]$ 区间中即可 这个是满分做法, 68pts 做法在上一篇博客中 会 68 pts 做法后就十分简单了,只要来一遍线段树合并 righ
阅读全文
摘要:一定注意每一次都要是 $root[cur]=root[cur-1]$,不然进行合并时如果 $a,b$ 在同一集合中就会使 $root[cur]=0$. Code:
阅读全文
摘要:Code:
阅读全文
摘要:Code:
阅读全文
摘要:在一棵树上,我们要求点 $(u,v)$ 之间路径的第$k$大数。 对于点 $i$ ,建立 $i$ 到根节点的一棵前缀主席树。 简单容斥后不难得出结果为$sumv[u]+sumv[v]−sumv[lca]−sumv[fa[lca]]$ 其他的和主席树是一样的。 Code:
阅读全文

浙公网安备 33010602011771号