HDU 5919 题意: 动态处理一个序列的区间问题,对于一个给定序列,每次输入区间的左端点和右端点,输出这个区间中:每个数字第一次出现的位子留下, 输出这些位子中最中间的那个,就是(len+1)/2那个。 思路: 主席树操作,这里的思路是从n到1开始建树。其他就是主席树查询区间第K小,计算区间不同 ...
分类:
其他好文 时间:
2018-11-16 00:28:54
阅读次数:
142
"传送门" 解题思路 主席树模板题,主席树就是一个支持查询历史版本的数据结构,就是在原树的基础上只修改那些受影响的部分以保证时空复杂度。做法就是首先离散化,然后给每个值建一棵线段树,每次建在上一个的基础上,然后查询的时候就变成前缀和相减的形式。时间复杂度$O(nlogn)$。 代码 cpp incl ...
分类:
其他好文 时间:
2018-11-15 01:34:33
阅读次数:
181
"传送门" 解题思路 给每一时刻建一棵线段树维护当前时刻的值,然后修改的时候直接修改,查询的时候直接查,记住查询完后一定要复制。 代码 cpp include include include include include using namespace std; const int MAXN = ...
分类:
编程语言 时间:
2018-11-15 01:29:36
阅读次数:
207
主席树学名可持久化线段树,就是这个可持久化,衍生了多少数据结构 为什么会有主席树这个数据结构呢?它被发明是用来解决什么问题的呢? 给定n个数,m个操作,操作类型有在某个历史版本下单点修改,输出某个历史版本下某个位置的值的值,n和m小于等于1e6 乍一看是不是一点头绪也没有。我们先来想想暴力怎么做,暴 ...
分类:
其他好文 时间:
2018-11-06 17:44:55
阅读次数:
257
前言 主席树可真是个好东西 之前一直都觉得挺难的 今天一看 woc这么简单! 怎么可能,我还是太蒟蒻了 感谢akakw1大佬的指导! 正文: 一.前置知识及算法思路 1.可持久化 因为主席树是可持久化线段树,所以还是有必要了解一下可持久化 可持久化的数据结构是可以支持访问任一历史版本的(也就是每一次 ...
分类:
其他好文 时间:
2018-11-05 22:24:13
阅读次数:
259
一些有启发性的思路 序列 线段树(当然还要有 主席树 啊!) 差分和前缀和啊 分块 莫队 看到 等差数列 先推一波式子啊(天天爱跑步) 有序序列 的动态插入删除 有的时候需要算贡献,当你发现序列(离散化后)值域一定时,便可以尝试使用树状数组 维护$mex$ 可以尝试使用 值域分块 ,当这个块内全部有 ...
分类:
其他好文 时间:
2018-11-04 15:33:39
阅读次数:
182
[湖南集训] 谈笑风生 题目描述 设 T 为一棵有根树,我们做如下的定义: ? 设 a 和 b 为 T 中的两个不同节点。如果 a 是 b 的祖先,那么称“a 比 b 不知道高明到哪里去了”。 ? 设 a 和 b 为 T 中的两个不同节点。如果 a 与 b 在树上的距离不超过某个给定常数 x,那么称 ...
分类:
其他好文 时间:
2018-11-04 00:30:44
阅读次数:
179
写完树剖之后发现还没有讲过区改区查线段树。。。 标记永久化线段树的用处: 支持区改区查,嗯,就这样。(不过听很多dalao说这种线段树有利于写主席树) 算法核心思路: 对于一段区间加,假如它把线段树上的一部分完全包涵,那么我们就把它“永久”的加在这部分上,否则就加在另外一个神奇的地方,这个神奇的地方 ...
分类:
其他好文 时间:
2018-11-03 17:40:02
阅读次数:
270
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3653 对于一个 (a,b,c),分成 b 是 a 的祖先和 b 在 a 子树里两部分; 第一部分 b 可以选 min(dep[a]-1,k) 个,c 可以选 siz[a]-1 个,乘起来即可; ...
分类:
其他好文 时间:
2018-10-29 10:25:37
阅读次数:
178
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3653 原来一直想怎么线段树合并。可是不会把角标挪一位。 查询的其实是子树内一段深度的点的 siz 和。因为是子树内,所以按 dfs 序建立主席树,角标是 dep ,值是 siz 。 注意 lo ...
分类:
其他好文 时间:
2018-10-29 10:24:13
阅读次数:
139