主席树
Hanks_o
一名。
展开
-
bzoj1803: Spoj1487 Query on a tree III(DFS序+主席树)
题目传送门 题意: 求子树第k小。解法: 求子树啊。 那么肯定DFS序啊。 因为DFS序子树肯定是连续的。 这样可以用主席树来维护咯。代码实现:#include<cstdio>#include<cstring>#include<cstdlib>#include<iostream>#include<algori...原创 2018-04-07 17:05:10 · 188 阅读 · 0 评论 -
bzoj5178: [Jsoi2011]棒棒糖(主席树)
题目传送门 。解法: 主席树求区间超过区间长度一半次数的数。代码实现:#include<cstdio>#include<cstring>#include<cstdlib>#include<iostream>#include<algorithm>#include<cmath>#include<...原创 2018-04-18 10:18:11 · 282 阅读 · 0 评论 -
bzoj3439: Kpm的MC密码(主席树+DFS序+字典树)
题目传送门 做这题有人跟我说用链表。处理相同的串。 网上都说要。。 其实不用吧。。记录每个串的结尾是在字典树上哪个点就行啊。 然后一个一个插啊。解法: 因为是后缀所以到这建字典树。 然后kpm串肯定是子树的所有串。 那么用主席树维护子树第k小。 要求编号连续就套个dfs序就行了。代码实现:#include<cstdio>#include<cstrin...原创 2018-04-18 10:12:56 · 254 阅读 · 0 评论 -
bzoj3123: [Sdoi2013]森林(主席树+Lca+启发式合并)
题目传送门 。解法: 因为是森林。那么lca是必须求的。 但是你连接两个点的话指向父亲的方向是会变的。 比如说x原来的父亲fa。现在x要连向y了。那么fa的父亲变成了x。那我们合并两个块的时候。 将点数小的往大的合并。这样的话总复杂度不会超过nlogn。 据说这是启发式合并。维护就用主席树。 x维护x到根的信息。 合并的时候,由于方向会边。那么要先删除原来的主席树。 ...原创 2018-04-17 19:12:03 · 231 阅读 · 0 评论 -
bzoj4448: [Scoi2015]情报传递(主席树+Lca)
题目传送门 严重吐槽这题数据!! 花了一下午一直在调一个AC代码。 提交莫名WA。因为我建的是单向边。 题目说明规定了父亲。那不就是单向边吗。。 然后本机栈不够大RE了半天。 然后肉老师告诉我一个本地扩栈的方法然后我过了。。 然后又WA了。 然后%题解。发现建的都是双向边。 这题不是规定了父亲吗??? 然后建了双向才过了。。。 数据跟题意不符啊。解法: 当前第i天有个询...原创 2018-04-17 19:07:32 · 227 阅读 · 0 评论 -
bzoj3545: [ONTAK2010]Peaks(主席树+最小生成树)
题目传送门 。解法: 好题啊。 只会不强制在线的。 强制在线的表示不会。离线。 首先x可以到达的点其实都可以互相到达。 那么我们可以看作是一个联通块。 要求边权尽量小其实就是最小生成树啊。离线首先按每次询问的x排序。 然后依次建小于等于x的最小生成树。 那么当前v所在的联通块的第k大实际上就是答案。 并查集压缩路径的时候合并一下主席树即可。吐槽: 时限太少了。...原创 2018-04-11 21:23:53 · 367 阅读 · 0 评论 -
bzoj2588: Spoj 10628. Count on a tree(主席树+LCA)
题目传送门 。解法: 树上主席树。 我在想要不要离散化。 想看看数据范围。 翻了翻discuss发现很神奇啊。 什么MLE,什么开longlong?? 然后我就很乖的开了long long。第i棵主席树维护根到i的信息。 如何求x到y路径的信息呢。 p表示lca。 那么用x到根+y到根-p到根-p的父亲到根就得到x到y的信息。 然后作第K大就行了呀。记得离散化。...原创 2018-04-11 19:07:46 · 163 阅读 · 0 评论 -
bzoj3207: 花神的嘲讽计划Ⅰ(hash+主席树)
题目传送门 。解法: 然而我不是很清楚hash为啥要开long long int 不行吗。。hash学习 学了一发hash。 这个东西有点狗啊。 有几率重复啊。。 不过很小(欧洲人)然后主席树维护一下每个hash。 离散化一下。 因为长度为k。 那么把进来的串变成hash。 然后在区间找这个hash是否出现过。。然后就本机AC提交WA了。 改了longlon...原创 2018-04-11 16:02:33 · 223 阅读 · 0 评论 -
bzoj3932: [CQOI2015]任务查询系统(主席树)
题目传送门 。解法: 求一个点的状态。 这个就差分下然后用主席树维护就可以了啊。l到r加上k这个任务。 那么l加上k的影响,r+1减去k的影响。 然后前缀和就是每个点的状态。 那么直接差分主席树。代码实现:#include<cstdio>#include<cstring>#include<cstdlib>#include&l...原创 2018-04-11 13:33:44 · 217 阅读 · 0 评论 -
bzoj5177: [Jsoi2013]贪心的导游(主席树)
题目传送门 。解法: 想了半天只有暴力。 结果还真是暴力。。暴力枚举p的倍数。 用主席树找出区间内p*i~p*(i+1)-1的最大数。 然后减去P*i。代码实现:#include<cstdio>#include<cstring>#include<cstdlib>#include<iostream>#include...原创 2018-04-11 13:30:24 · 247 阅读 · 0 评论 -
bzoj3110: [Zjoi2013]K大数查询(主席树+树状数组)
题目传送门 。解法: 据说有很多种写法。 我写的主席树套树状数组。 修改的话就差分一下就好啦。 位置l加上影响,位置r+1消除影响。用树状数组来求每个点有哪些数。 每个点的信息相当于求1~这个点的前缀和(差分) 那么我们怎么求区间呢。 相当于求前缀和的前缀和。 如果要求1到i的信息。 某个位置为j。 a[j]对与i的贡献就为a[j]*(i-j+1) 那么我们把i+1...原创 2018-04-11 10:41:40 · 275 阅读 · 0 评论 -
bzoj2733: [HNOI2012]永无乡(并查集+主席树)
题目传送门 。解法: 跟3545解法差不多。 https://blog.csdn.net/hanks_o/article/details/79903342 这道题还没了边权。 直接连通。那么并查集。 据说要启发式。 小的向大的合并。 然后就没了?代码实现:#include<cstdio>#include<cstring>#includ...原创 2018-04-16 17:04:06 · 274 阅读 · 0 评论 -
bzoj1146: [CTSC2008]网络管理Network(dfs序+主席树+树状数组)
题目传送门 第一次做树上带修主席树。。 肝吐血。解法: 第i棵主席树维护根到i的数。 查询的话就求个lca。 然后用x到根的信息加上y到根的信息-lca到根的信息-lca父亲到根的信息。 主席树维护即可。 lca随便用什么算法求都行。修改的话。 每棵主席树维护的是到根的信息。 那么修改一个点只对于整棵子树有影响。 对整棵子树有影响一般的套路不都是dfs序嘛。。 dfs...原创 2018-04-11 09:21:41 · 276 阅读 · 0 评论 -
bzoj1112: [POI2008]砖块Klo(主席树)
题目传送门 。解法: 比赛的时候不知道怎么就一直在想主席树(可能最近做主席树有点多) 然后什么线段树啊树状数组都没想过。 然后就被师兄强行40M卡空间全爆了。。 大视野还是有良心的啊162M。。就用主席树求出中位数,然后没了。代码实现:#include<cstdio>#include<iostream>#include<algorit...原创 2018-04-16 12:48:50 · 409 阅读 · 0 评论 -
bzoj3524: [Poi2014]Couriers(主席树)
题目传送门 。解法: 主席树维护的不就是每个权值出现了多少次嘛。 就建棵主席树往下搜就是了。。代码实现:#include<cstdio>#include<cstring>#include<cstdlib>#include<iostream>#include<algorithm>#include<cma...原创 2018-04-07 17:37:42 · 220 阅读 · 0 评论 -
bzoj2809: [Apio2012]dispatching(DFS序+主席树)
题目传送门 。解法: 对于每个节点。 选他做管理员。 满意度为领导力*子树最多选多少人。 需解决子树最多选多少人。考虑主席树。 既然是子树。肯定要用到DFS序。 DFS之后子树的编号都是连续的。 那么我们相当于在区间内求数最多且和不超过M。按照权值建线段树(也就是主席树) 如果左子树的总费用是大于等于当前预算的话。 那么肯定去左子树搜索。 因为左子树是权值较小的(...原创 2018-04-07 17:14:41 · 274 阅读 · 0 评论 -
bzoj4477: [Jsoi2015]字符串树(主席树+Hash+Lca)
题目传送门 。解法: 长度小于等于10? hash+主席树啊!!! 然后我就苦逼了的码了一个钟。 然后跑的贼慢倒数第三。。 网上的据说全是可持久化字典树?? 什么鬼我不会。。 只能用主席树了。建10棵主席树来维护长度不同的前缀。 然后树上主席树求一下就好了?代码实现:#include<cstdio>#include<cstring>...原创 2018-04-12 16:39:39 · 208 阅读 · 0 评论