随笔分类 - 数据结构-线段树-可持久化线段树
摘要:[LuoguP4094] [HEOI2016] [TJOI2016]字符串(二分答案+后缀数组+ST表+主席树) 题面 给出一个长度为的字符串,以及组询问.每个询问是一个四元组,问的所有子串和字符串的最长公共前缀长度的最大值。
阅读全文
摘要:[BZOJ 3123] [SDOI 2013]森林(可持久化线段树+启发式合并) 题面 给出一个n个节点m条边的森林,每个节点都有一个权值。有两种操作: 1. Q x y k查询点x到点y路径上所有的权值中,第k小的权值是多少。此操作保证点x和点y连通,同时这两个节点的路径上至少有k个点。 2. L
阅读全文
摘要:[BZOJ 2989]数列(二进制分组+主席树) 题面 给定一个长度为n的正整数数列a[i]。 定义2个位置的graze值为两者位置差与数值差的和,即graze(x,y)=|x y|+|a[x] a[y]|。 2种操作(k都是正整数): 1.Modify x k:将第x个数的值修改为k。 2.Que
阅读全文
摘要:[HNOI2016]树(可持久化线段树+树上倍增) 题面 给出一棵n个点的模板树和大树,根为1,初始的时候大树和模板树相同。接下来操作m次,每次从模板树里取出一棵子树,把它作为新树里节点y的儿子。操作完之后有q个询问,询问新树上两点之间的距离 分
阅读全文
摘要:[Codeforces 464E] The Classic Problem(可持久化线段树) 题面 给出一个带权无向图,每条边的边权是$2^{x_i}(x_i include include include include include define maxn 500000 define maxm
阅读全文
摘要:[BZOJ 2653] middle(可持久化线段树+二分答案) 题面 一个长度为n的序列a,设其排过序之后为b,其中位数定义为b[n/2],其中a,b从0开始标号,除法取下整。 给你一个长度为n的序列s。 回答Q个这样的询问:s的左端点在[a,b]之间,右端点在[c,d]之间的子序列中,最大的中位
阅读全文
摘要:题面 题意:给你一个数组a[n],对于数组每次建立一个完全k叉树,对于每个节点,如果父节点的值比这个节点的值大,那么就是一个违规点,统计出1~n 1完全叉树下的违规点的各自的个数。 分析 注意到完全k叉树的一个性质,v节点的儿子是k (v 1)+2...kv+1,v节点的父亲为(v+k 2)/k 那
阅读全文
摘要:题面 单点修改,区间求第k大 分析 首先,这道题卡权值线段树套treap的做法,所以只能用主席树做 对于静态的查询,root[i]对应的主席树的区间[l,r]保存的是a[1]~a[i]有多少个值落在区间[l,r]内。如果我们要修改a[i],则要修改O(n)棵主席树。那么我们像树状数组那样维护n棵主席
阅读全文
摘要:题面 分析 对于一个区间修改(s,e,v),我们可以将它差分,这样就变成了单点修改s和e+1(s插入,t+1删除) 我们用主席树维护差分数组的前缀和,第i棵主席树维护区间[1,i]之间的所有差分值 那么查询我们直接在第i棵主席树里查第k大即可 注意: 1.主席树里面要维护两个值,一个是值落在区间[l
阅读全文
摘要:题面 给定一棵N个节点的树,每个点有一个权值,对于M个询问(u,v,k),你需要回答u xor lastans和v这两个节点间第K小的点权。其中lastans是上一个询问的答案,初始为0,即第一个询问的u是明文。 分析 第i棵主席树存储dfs序(dfn)为i的节点到根的链上序列,按dfn更新 查询用
阅读全文