主席树
Anxdada
多读书多看报, 少吃零食多睡觉
展开
-
主席树 (模板)
模板题 //思想:主席树就是一颗持久化线段树, 为什么叫持久化了, 因为它可以保存之前的线段树版本, 并且可以拿来用, 从而优化空间. (至于为什么叫主席树了, 大概是因为发明这个算法的人的名字的缘故吧….) 详细说说: 主席树是一种离线数据结构,是由很多棵线段树组成的。 第i棵线段树存的是前i个数的信息: 每一个线段存数字的出现次数(因此建树之前要离散化)。 那么n棵线段树不会MLE原创 2017-08-02 16:13:23 · 639 阅读 · 0 评论 -
计蒜之道 初赛第一场 百度科学家(困难) 【主席树优化建图】
传送门 题目大意: 太长了, 自己看. 思路: 主要是优化一个问题, 向区间连边, 那么就可以用线段树优化, 但是这个带修改点, 也就是要加入新的点, 所以就用主席树来优化建图, 每一个子节点就作为点本身, 然后其他的还是一样, 缩点, 找点权和最小叶子结点即可… 这道题目就作为主席树优化建图的入门题吧.AC Coideconst int maxm = 1e5 +5;// ...原创 2018-07-30 09:56:07 · 218 阅读 · 0 评论 -
HDU 6162 Ch’s gift 【LCA暴力 or 主席树 + 树链剖分】
传送门 题目大意: 一颗树, 树上有点权, 每次询问u, v的树上路径上的点权范围在[a, b]内的权值和是多少.思路: 这道题居然暴力能过, 而且巨快…. 后面还是写了写正解. 很明显我们需要把u - > v的路径剖下来, 然后问题就变成区间问题了, 询问区间中在一定范围内的数的和, 而我们知道主席树可以做区间中小于等于某个数的和是多少, 所以这个就可以用主席树来维护, 同时维护下&...原创 2018-07-30 09:24:34 · 199 阅读 · 0 评论 -
SPOJ - DQUERY query 【主席树】询问区间中不同的数字个数 and HDU - 5919 【主席树求不同个数 + 思维】
传送门 题目大意: 询问区间不同数的个数有多少个.做法: 主席树维护, 也就是如果当前这个数没有出现过, 那么我们就新开一颗线段树维护, 区间长度++, 如果是之前出现过, 那么把之前出现的位置的线段树先减掉, 然后再在当前这颗线段树再加回去, 这样就保证了每个区间中相同种数出现的次数最多为一次, 这样直接询问区间中的值即可.AC Codeconst int maxn = 1e5+5...原创 2018-07-30 10:32:04 · 561 阅读 · 2 评论 -
HDU - 4417 Super Mario 【主席树 】 询问区间中小于等于某个数的个数
传送门 题目大意: 询问区间中小于等于某个数的个数思路: 没什么好说的,,, 就是一个模板题, 会求区间第k大, 就会求这个.const int maxn = 1e5+5;int n, m;struct Tree { int ls, rs, val; // 左右儿子的编号, 和维护的一个值.}tre[maxn*40];int idx, root[maxn];int ...原创 2018-07-30 10:35:42 · 767 阅读 · 0 评论 -
西科大第12届院赛 C 上决╇ф的旅程 【主席树】
传送门 题意: 给定一颗带权有根树, 即有边权也有点权, 每次询问一颗子树内与当前这颗子树的根的距离不超过L的点权和。思路: 我们记录下每个点到根的距离, 设为dep[i], 那么询问相当于为de[to] - depu] <= L 的点劝和, 实际上就是dep[to] <= dep[u] + L, 其次还有就是通过dfs序可以把子树表示为一段区间, 所以问题就转化为了一段区间中小...原创 2018-07-31 15:20:11 · 207 阅读 · 0 评论