可持久化
文章平均质量分 56
Jozky86
这个作者很懒,什么都没留下…
展开
-
P3302 SDOI2013森林
P3302 [SDOI2013]森林题意:一片森林,有n个节点,m个边,现在有t个操作,Q x y k:Q x y k 查询点 x 到点 y 路径上所有的权值中,第 ·k 小的权值是多少L x y 在点 x 和点 y 之间连接一条边。保证完成此操作后,仍然是一片森林。必须在线操作题解:算是这个题P2633 Count on a tree的延申,这个题是求点x与点y路径上的第k小权值,本题多了一个合并操作。合并我是这样想的:如图,如果我们要合并点10和点13,我想的是直接让13的父亲节点为10原创 2021-09-08 15:43:16 · 84 阅读 · 0 评论 -
[SDOI2010]粟粟的书架
[SDOI2010]粟粟的书架题意:一个R * C的矩阵,每个位置都有个数page[ij],现在选定一个小矩阵范围(给左上角坐标,和右下角坐标),问这个范围内的数总和是否大于h,如果大于h的话最少选几个数aij对于50%的数据,满足R, C≤200,M≤200,000;另有50%的数据,满足R=1,C≤500,000,M≤20,000;对于100%的数据,满足1≤Pi,j≤1,000,1≤Hi≤2,000,000,000。题解:题目数据给的很奇特,一半是R,C均小于200,另一半R=1(R=1原创 2021-08-05 21:17:39 · 122 阅读 · 0 评论 -
可持久化汇总(讲解+题目)
可持久化(一)可持久化(二)可持久化3–可持久化01Trie可持久化4–可持久化并查集各模块的例题都在各自讲解下面有写下面是加强练习练习题:P4137 Rmq Problem / mexP4587 [FJOI2016]神秘数CF484E Sign on FenceCF1080F Katya and Segments SetsP2468 [SDOI2010]粟粟的书架P3302 [SDOI2013]森林P3168 [CQOI2015]任务查询系统U77164 祖先统计IIIAcw原创 2021-08-04 19:40:04 · 128 阅读 · 0 评论 -
P3402 可持久化并查集
P3402 可持久化并查集题意:给定 n 个集合,第 i 个集合内初始状态下只有一个数,为 i。有 m 次操作。操作分为 3 种:1 a b 合并a,b 所在集合;2 k 回到第 k 次操作(执行三种操作中的任意一种都记为一次操作)之后的状态;3 a b 询问 a,b 是否属于同一集合,如果是则输出 1,否则输出 0。题解:可持久化并查集模板题这个博客讲的非常详细按sz合并一般称为启发式合并,按height合并一般称为按秩合并,代码中是按秩合并按秩合并其实就是,我们以树高为秩,每次将树原创 2021-08-04 17:56:52 · 131 阅读 · 0 评论 -
可持久化4--可持久化并查集
可持久化并查集可持久化并查集 = 按秩合并并查集 + 可持久化数组首先并查集不能采用路径压缩,这是因为一次findR操作中,fa数组的很多位置(u->ru)会发生修改,由于每次修改都需要在可持久化数组上复制产生log个新结点,空间复杂度过大。我们不希望每个版本的fa数组的差别太大,最好只有常数个位置改变。启发式合并/按秩合并当 merge(u,v) 时,找到ru,rv后,让 sz 小的接在sz大的下面:if(sz[ru] > sz[rv]) swap(ru,rv);fa[ru] =原创 2021-08-04 17:21:30 · 280 阅读 · 0 评论 -
P3293 [SCOI2016]美味
P3293 [SCOI2016]美味题意:有n个数组a,现在有m个询问,每次给出一个b和x,问b xor (a[i] + x)的最大值是多少?题解:不难看出01Trie的题目我们设ans=a[i]+x,我们想要b xor ans的最大值,这个很好说经典套路,如果b的第i位是1,我们就希望ans的第i位是0,此时我们希望ans是张这样子的:这样不难求出a[j]的范围:a[j]∈[ans-x,ans-x+(1<<i+1)-1]此时我们就看这个区间内是否存在a[j]满足情况,也就是看这原创 2021-08-03 21:34:48 · 88 阅读 · 0 评论 -
P4592 [TJOI2018]异或
P4592 [TJOI2018]异或题意:现在有一颗以 1 为根节点的由 n 个节点组成的树,节点从 1 至 n 编号。树上每个节点上都有一个权值 vi。现在有 q 次操作,操作如下:1 x z:查询节点 x 的子树中的节点权值与 z 异或结果的最大值。2 x y z:查询节点 x 到节点 y 的简单路径上的节点的权值与 z 异或结果最大值。题解:很明显的可持久化01Trie对于第一个问题,直接按照时间戳(DFS序)建立点权的可持久化01Trie,每次查询就是对区间[dfn[u],dfn[u]原创 2021-08-03 19:50:12 · 220 阅读 · 0 评论 -
P4735 最大异或和
P4735 最大异或和题意:一个非负序列a,初始长度为n,有两种操作:A x,在序列中添加x,n加一Q l r x,询问操作,询问一个位置p,p满足l<=p<=r,使得p到位置n的的异或和与x的异或值最大,输出最大值题解:我们来看这个查询操作,p∈[l,r],我们设整个区间的异或值为tot,a[p]⊕a[p+1]⊕.....a[N]a[p] ⊕ a[p+1] ⊕ .....a[N]a[p]⊕a[p+1]⊕.....a[N]=tot⊕(a[1]⊕a[2].....⊕a[p−1])原创 2021-08-02 21:42:07 · 239 阅读 · 0 评论 -
可持久化3--可持久化01Trie
01Trie可持久化 01Trie 的方式和可持久化值域线段树的方式是相似的,只是以 01字典树 的方式来维护值域。一般用来解决异或相关的能够按位贪心的题目。其实就是将可持久化线段树中的操作嫁接到01Trie中,这样就是解决任意一个区间内的问题。例题:P4735 最大异或和P4551 最长异或路径P4592 [TJOI2018]异或P3293 [SCOI2016]美味...原创 2021-08-02 21:33:08 · 285 阅读 · 0 评论 -
P3567 [POI2014]KUR-Couriers
P3567 [POI2014]KUR-Couriers题意:给一个长度为 n 的正整数序列 a。共有 m 组询问,每次询问一个区间 [l,r] ,是否存在一个数在 [l,r]中出现的次数严格大于一半。如果存在,输出这个数,否则输出 0。题解:这算是主席树模板题我们都知道主席树其实就是权值线段树的前缀和,我们想判断是否有出现次数严格大于一半的数,对于区间[l,r],len = r-l+1,比较2棵值域线段树中左子/右子的sz之差和len/2的关系,易知左子/右子只有其中之一能够满足sz之差超过len原创 2021-08-02 20:21:12 · 126 阅读 · 0 评论 -
P2633 Count on a tree
P2633 Count on a tree题意:给定一棵 n 个节点的树,每个点有一个权值。有 m 个询问,每次给你 u,v,k,你需要回答 u xor last 和 v 这两个节点间第 k 小的点权。其中last 是上一个询问的答案,定义其初始为 0,即第一个询问的 u 是明文。题解:很明显,主席树,而且强制在线(更是主席树)主席树是维护了一个类似前缀和的数据结构,当要查询线性区间[l,r]的第k小时,用第r个线段树减第l-1个线段树,得到的就是[l,r]之间的权值线段树(因为主席树维护的就是原创 2021-07-31 00:20:16 · 316 阅读 · 0 评论 -
可持久化(二)
文章目录【可持久化值域线段树/主席树】主席树代码【二维数点】【可持久化值域线段树/主席树】P3834 【模板】可持久化线段树 1(主席树)查询序列区间第k小,静态在线。给定 n 个整数构成的序列,将对于指定的闭区间查询其区间内的第 k 小值。类似值域线段树上二分求kth的方法,对于[l,r]区间内部的 kth,若有[1,l-1]和[1,r]2个前缀所对应的2棵值域线段树rt0/rt1,也可以通过:比较 getSZ(rt1->ls) - getSZ(rt0->ls) 和 当前k 的大小原创 2021-07-30 21:22:23 · 192 阅读 · 0 评论 -
可持久化(一)
可持久化数据结构:可以保留每一个历史版本,若所有版本都既可以访问又可以修改,成为完全可持久化(可以回滚到某个历史版本)原创 2020-10-18 11:42:01 · 266 阅读 · 0 评论