随笔分类 - 数据结构 -- 主席树
摘要:【BZOJ5495】[十二省联考2019]异或粽子(主席树,贪心) 题面 "BZOJ" "洛谷" 题解 ~~这不是送分题吗。。。~~ 转异或前缀和,构建可持久化$Trie$。 然后拿一个堆维护每次的最大值,每次如果取了一个数,就把它再在$Trie$树上查一次新建一个元素丢回堆里就行了。 cpp in
阅读全文
摘要:【BZOJ4408】[FJOI2016]神秘数(主席树) 题面 "BZOJ" "洛谷" 题解 考虑只有一次询问。 我们把所有数排个序,假设当前可以表示出的最大数是$x$。 起始$x=0$。 依次考虑接下来的每个数$a_i$,如果$a_i\le x$,那么没有啥问题,$x+=a_i$。 如果$a_i=
阅读全文
摘要:【BZOJ5304】[HAOI2018]字串覆盖(后缀数组,主席树,倍增) 题面 "BZOJ" "洛谷" 题解 贪心的想法是从左往右,能选就选。这个显然是正确的。 题目的数据范围很好的说明了要对于询问分开进行处理。 先考虑询问的模板串长比较大的情况。 那么只需要每次找到一个范围内的最小位置然后接着暴
阅读全文
摘要:【BZOJ4771】七彩树(主席树) 题面 "BZOJ" 题解 如果没有深度限制,每次只询问子树内的颜色个数,除了树套树$dfs$序加前驱或者后继强行二维数点之外,还有这样一种做法: 把所有相同颜色的点按照$dfs$序排序,每个点给自己的位置贡献$1$,相邻的两个点给$lca$贡献$ 1$。然后只要
阅读全文
摘要:【LOJ 6073】距离(主席树) 题面 "LOJ" 题解 两点间的距离是$dep[x]+dep[y] 2dep[LCA]$。 那么题目要求的东西拆开维护,唯一不好做的就是$2dep[LCA]$。 而现在要求的是某个单点与一个点集的所有$LCA$的深度和。 那么把点集中每一个点到根的路径全部标记一次
阅读全文
摘要:【BZOJ4477】[JSOI2015]字符串树(Trie树) 题面 "BZOJ" 题解 对于每个点维护其到根节点的所有字符串构成的$Trie$,显然可持久化一下就很好写了。 然后每次询问就是$u+v 2lca$,写个树剖维护$LCA$就好了。 cpp include include include
阅读全文
摘要:【BZOJ3551】Peaks加强版(Kruskal重构树,主席树) 题面 "BZOJ" Description 在Bytemountains有N座山峰,每座山峰有他的高度h_i。有些山峰之间有双向道路相连,共M条路径,每条路径有一个困难值,这个值越大表示越难走,现在有Q组询问,每组询问询问从点v开
阅读全文
摘要:【BZOJ2989】数列(二进制分组,主席树) 题面 "BZOJ" 权限题啊。。。 Description 给定一个长度为n的正整数数列a[i]。 定义2个位置的graze值为两者位置差与数值差的和,即graze(x,y)=|x y|+|a[x] a[y]|。 2种操作(k都是正整数): 1.Mod
阅读全文
摘要:【BZOJ4137】火星商店问题(线段树分治,可持久化Trie) 题面 "洛谷" BZOJ权限题 题解 显然可以树套树,外层线段树,内层可持久化Trie来做。 所以我们需要更加优美的做法。——线段树分治。 什么叫做线段树分治呢? 我们发现每次询问都是区间的形式,看到区间我们就可以想到线段数。 我们接
阅读全文
摘要:【BZOJ3166】ALO(主席树) 题面 权限题qwq "资磁洛谷" 题解 用一个$set$求出左右侧比这个数大的第$2$个数, 然后用可持久化$Trie$算一下就好啦 cpp include include include include include include include usin
阅读全文
摘要:【BZOJ5338】[TJOI2018]异或(主席树) 题面 "洛谷" 题解 很明显的是$Trie$树上暴力判断答案 因为要支持区间,用主席树的结构存$Trie$树就好了 cpp include include include include include include include incl
阅读全文
摘要:【BZOJ5319】军训列队(主席树) 题面 "BZOJ" "洛谷" 题解 一眼题既视感。。。 首先很明显,每次询问的结果显然是做一次离散。 然后直接上主席树就好了。。。 查询答案的方式也很简单 考虑一下那个绝对值是个什么东西 如果所有的点都在目标区间以左 则直接区间和去算一下。 如果所有的点都在目
阅读全文
摘要:【BZOJ2653】Middle(主席树) 题面 "BZOJ" "洛谷" Description 一个长度为n的序列a,设其排过序之后为b,其中位数定义为b[n/2],其中a,b从0开始标号,除法取下整。给你一个 长度为n的序列s。回答Q个这样的询问:s的左端点在[a,b]之间,右端点在[c,d]之
阅读全文
摘要:【CF484E】Sign on Fence(主席树) 题面 懒得贴CF了,你们自己都找得到 "洛谷" 题解 这不就是[TJOI&HEOI 排序]那题的套路吗。。。 二分一个答案,把大于答案的都变成$1$,其余变成$0$ 按照题目要求的区间内连续的$K$个 就是检查最长的连续$1$的子段长度大于$K$
阅读全文
摘要:【CF813E】Army Creation(主席树) 题面 "CF" "洛谷" 翻译 by ppl 见洛谷 题解 考虑最多只会有$K$个相同的数 那么,也就是说,如果一个数会被选 那么,和它相等的数中,在它前面的第$K$的位置应该小于$l$ 所以开个$vector$直接搞 然后按照前面的第$K$个数
阅读全文
摘要:【HDU5919】SequenceII(主席树) 题面 "Vjudge" 翻译(by ppl) 题解 先考虑一下怎么求区间内有多少个不同的数 方法有两种 第一种: 记录一下每个数上一次出现的位置 每次将这个位置+1 最后求$l,r$区间内的数的个数 也就是求区间内上一次出现的位置在$l$左侧的数的个
阅读全文
摘要:【SYZOJ279】滑稽♂树(树套树) 题面 "SYZOJ" "CJOJ" 题目描述 zzsyz实验楼里面种了一棵滑稽树,只有滑稽之力达到大乘期的oier才能看到。虽然我们看不到,但是还是知道一些信息: 这真的是一棵树,由n个节点,n 1条边联通。一号滑稽果同时也是整棵滑稽树的树根。 滑稽树上每个节
阅读全文
摘要:【BZOJ4556】字符串(后缀数组,主席树) 题面 "BZOJ" 题解 注意看题: 要求的是$[a,b]$的 子串 和[c,d]的$lcp$的最大值 先来一下暴力吧 求出$SA$之后 暴力枚举$[A,B]$之间的后缀 求一个$lcp$ 复杂度$O(nm)$ $40$分到手
阅读全文
摘要:【BZOJ1146】网络管理(主席树,树状数组) 题面 "BZOJ权限题,洛谷题面" 题解 树上带修改主席树 貌似和$Count\ On\ A\ Tree$那题很相似呀 只需要套上一个树状数组来维护修改好就好了 但是记住是用$dfs$来记录主席树的标号 一定不要搞错了 每一次修改只会影响他子数的值
阅读全文
摘要:【BZOJ2006】超级钢琴(主席树,优先队列) 题面 "BZOJ" 题解 既然是一段区间 首先就要变成单点 所以求一个前缀和 这个时候贪心很明显了: 枚举每一个点和可以和它组成一段的可行的点 全部丢进一个堆里面 取出最大的$K$个就行了 但是,很显然,我们做不到都取出来 所以,考虑怎么优化这个过程
阅读全文