随笔分类 -  数据结构 - 主席树

摘要:题目大意:给定一个 N 个数字的排列,需要支持两种操作:对某个位置的数字 + 1e7,查询区间 [1, r] 中最小的不等于区间中任何一个数字的数。 题解:本题证明了对于 50W 的数据来说,$O(nlog^2n)$ 的算法是过不去的。。 首先,最暴力的做法就是树状数组套权值线段树,实现了支持单点修 阅读全文
posted @ 2019-08-28 16:39 shellpicker 阅读(211) 评论(0) 推荐(0)
摘要:题目大意:给定一棵 N 个节点的树,点有点权,要求回答 M 个询问,每次询问点 u 到点 v 的简单路径(链)上权值第 K 小是多少。 题解:学习到了树上主席树。 主席树维护序列时,每次将后一个点的树建立在前一个点的树上,由此构成一个前缀和,并利用可以在线段树上二分的性质来求 K 小值。树上主席树维 阅读全文
posted @ 2019-03-04 09:26 shellpicker 阅读(248) 评论(0) 推荐(0)
摘要:题目大意:维护带修改区间 K 小值。 题解:学习到了树状数组套权值线段树。 主席树,即:可持久化权值线段树,支持维护静态区间的 K 小值问题,其核心思想是维护 N 棵权值线段树,每个线段树维护的是序列 [1,i] 的权值,并根据可持久化思想使得空间复杂度维持在 $O(nlogn)$。 树状数组套权值 阅读全文
posted @ 2019-03-02 21:39 shellpicker 阅读(353) 评论(0) 推荐(1)
摘要:Update at 2019.10.9 主席树的核心思想是多棵权值线段树对区间的划分具有一致性,且相同区间的值具有可减性。 可持久化的思想体现在对任意区间 $[l,r]$ 的处理上。 代码如下 cpp include using namespace std; const int maxn = 2e5 阅读全文
posted @ 2018-12-14 22:34 shellpicker 阅读(141) 评论(0) 推荐(0)