随笔分类 - 可持久化数据结构
摘要:[题目链接] https://www.lydsy.com/JudgeOnline/problem.php?id=2653 [算法] 显然 , 问题具有单调性 , 不妨对于每组询问首先二分答案mid 将大于等于mid的数看作1 , 小于mid的数看作-1 , 问题转化为判断是否有左端点在[l1 , r
阅读全文
摘要:[题目链接] https://www.lydsy.com/JudgeOnline/problem.php?id=5343 [算法] 对于每组询问 , 首先二分答案 显然 , 最优策略为优先选择价格低的 建立可持久化线段树 , 简单维护即可 时间复杂度 : O(NlogN ^ 2) [代码]
阅读全文
摘要:[题目链接] https://www.lydsy.com/JudgeOnline/problem.php?id=4408 [算法] 首先考虑一组询问怎样做 : 将数组按升序排序 , 假设我们现在可以表示出[1 , x]范围的数 , 加入一个数Ai , 则Ai必须满足 : Ai <= x + 1 若不
阅读全文
摘要:[题目链接] https://www.lydsy.com/JudgeOnline/problem.php?id=5338 [算法] 首先对这棵树进行树链剖分 那么我们就将一个树上的问题转化为一个序列上的问题 建立可持久化字典树维护最大异或值即可 时间复杂度 : O(NlogN ^ 2) [代码]
阅读全文
摘要:[题目链接] https://www.lydsy.com/JudgeOnline/problem.php?id=4556 [算法] 不难发现 , 对于每个询问 ans = max{ min{b - i + 1 , lcp(i , c) } (a <= i <= b) 不妨二分答案mid , 那么问题
阅读全文
摘要:[题目链接] https://www.luogu.org/problemnew/show/P4899 [算法] 建出原图的最小/最大生成树的kruskal重构树然后二维数点 时间复杂度 : O((N+Q)logN) [代码]
阅读全文
摘要:[题目链接] https://www.lydsy.com/JudgeOnline/problem.php?id=4571 [算法] 二分 + 可持久化线段树逐位确定答案的每一位即可 时间复杂度 : O(NlogN^2) [代码]
阅读全文
摘要:[题目链接] https://www.lydsy.com/JudgeOnline/problem.php?id=1901 [算法] 首先 , 考虑没有修改操作 不妨建立可持久化线段树 , 第i棵树维护区间[1 , i]中的数的出现个数 , 则可以通过在线段树上二分的方式求出答案 那么 , 若有修改操
阅读全文
摘要:[题目链接] https://www.lydsy.com/JudgeOnline/problem.php?id=3295 [算法] 记Lx表示第x个数的出现位置 显然 , 每次删去一个数 , 逆序对数减少([1 , Lx - 1]中 > x的数的个数 + [Lx + 1 , n]中 < x的数的个数
阅读全文
摘要:[题目链接] https://www.lydsy.com/JudgeOnline/problem.php?id=2141 [算法] 首先求出原序列中的逆序对个数 考虑交换两个数的位置 , 对答案产生的影响 显然 , (x , y)对答案的贡献为 : -(x对答案的贡献) - (y对答案的贡献) +
阅读全文
摘要:[题目链接] https://www.lydsy.com/JudgeOnline/problem.php?id=2588 [算法] 如果我们能知道“u到v这条路径上权值<= k的数的个数” , 那么就可以通过二分的方式求出答案 进一步地 , u到v路径上权值<= k的数的个数 = u到根节点路径上权
阅读全文
摘要:[题目链接] https://www.lydsy.com/JudgeOnline/problem.php?id=1803 [算法] 首先 , 一棵子树的DFS序必然为连续的一段 通过这个性质 , 我们将一个树上的问题转化为了一个序列上的问题 可持久化线段树可以解决该问题 , 不再赘述 时间复杂度 :
阅读全文
摘要:[题目链接] https://www.lydsy.com/JudgeOnline/problem.php?id=3585 [算法] 两种做法 : 1. 莫队 , 时间复杂度 : O(Nsqrt(N)) (sqrt表示开根号) 2. 可持久化线段树 , 我们只需在第i棵线段树上维护每个数最晚出现的时间
阅读全文
摘要:[题目链接] https://www.lydsy.com/JudgeOnline/problem.php?id=3932 [算法] 首先 , 我们可以将(Si , Ei , Pi)转化为在Si处加入Pi , 在(Ei + 1)出删除Pi 建立可持久化线段树 , 维护每秒出现任务的个数和优先级的和 ,
阅读全文
摘要:[题目链接] https://www.lydsy.com/JudgeOnline/problem.php?id=3524 [算法] 首先离线 , 将询问按右端点排序 如果我们知道[l , r]这个区间中[L , mid]中的数有多少个和[mid + 1 , R]中的数有多少个 , 则可以通过二分的方
阅读全文
摘要:[题目链接] http://poj.org/problem?id=2104 [算法] 考虑离线 , 将询问按右端点排序 对于每个询问(l , r , k) , 若我们知道区间[l , r]中 <= x的数有多少个 , 就可以通过二分解决 进一步 , 我们可以将区间[l , r]中 <= x 的数的个
阅读全文
摘要:[题目链接] https://www.luogu.org/problemnew/show/P3919 [算法] 可持久化线段树模板 详见这篇文章 : https://www.cnblogs.com/RabbitHu/p/segtree.html [代码]
阅读全文

浙公网安备 33010602011771号