随笔分类 - 线段树
摘要:[题目链接] https://codeforces.com/problemset/problem/666/E [算法] 首先建立广义后缀自动机 对于自动机上的每一个节点建一棵动态开点线段树 对于每次询问 , S[pl..pr]所表示节点可以在多串后缀树上倍增得到 那么我们需要的就是计算该节点中出现次
阅读全文
摘要:[题目链接] 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.luogu.org/problemnew/show/P4899 [算法] 建出原图的最小/最大生成树的kruskal重构树然后二维数点 时间复杂度 : O((N+Q)logN) [代码]
阅读全文
摘要:[题目链接] https://www.lydsy.com/JudgeOnline/problem.php?id=3551 [算法] 建出此图的kruskal重构树 用线段树合并维护每个联通块的第k大点权 这样就可以在线回答询问了 时间复杂度 : O((N + Q)log N) [代码]
阅读全文
摘要:[题目链接] https://www.lydsy.com/JudgeOnline/problem.php?id=4571 [算法] 二分 + 可持久化线段树逐位确定答案的每一位即可 时间复杂度 : O(NlogN^2) [代码]
阅读全文
摘要:[题目链接] https://www.lydsy.com/JudgeOnline/problem.php?id=3110 [算法] 整体二分 + 线段树 时间复杂度 : O(NlogN ^ 2) [代码]
阅读全文
摘要:Problem A. Two distinct points [题解] 显然 , 当l1不等于r2时 , (l1 , r2)是一组解 否则 , (l1 , l2)是一组合法的解 时间复杂度 : O(1) [代码] Problem B. Divisors of Two Integers [题解] 首先
阅读全文
摘要:[题目链接] https://codeforces.com/contest/600/problem/E [算法] 对于每一个点建立一棵线段树 , 维护当前点的子树中每个点的出现次数 可以通过深度优先遍历从下到上进行线段树合并 时间复杂度 : O(NlogN) [代码]
阅读全文
摘要:[题目链接] https://www.lydsy.com/JudgeOnline/problem.php?id=3073 [算法] 考虑线段树优化建图 建立两棵线段树 , 一棵为入树 , 一棵为出树 ,连边时 , 我们只需建立超级点S , 将区间[A , B]与点S连边 , 点S与区间[C , D]
阅读全文
摘要:[题目链接] https://www.lydsy.com/JudgeOnline/problem.php?id=2733 [算法] 用线段树维护图的联通块 , 并查集维护连通性 加边时可以直接线段树合并 时间复杂度 : O(NlogN) [代码]
阅读全文
摘要:[题目链接] https://www.lydsy.com/JudgeOnline/problem.php?id=3545 [算法] 离线加边 , 用并查集维护连通性 , 然后线段树合并即可 时间复杂度 : O(NlogN) [代码]
阅读全文
摘要:[题目链接] https://www.lydsy.com/JudgeOnline/problem.php?id=3307 [算法] 考虑树上差分 : 在路径x-y上每个点放一个物品c , 等价于 : 在x到根节点的路径上放一个物品c , 在y到根节点的路径上放一个物品c , 然后在x和y的最近公共祖
阅读全文
摘要:[题目链接] 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=3196 [算法] 树套树即可 笔者的这份代码使用的是线段树套伸展树 时间复杂度 : O(NlogN ^ 3) [代码]
阅读全文
摘要:[题目链接] https://codeforces.com/contest/787/problem/D [算法] 线段树优化建边 , 然后用Dijkstra算法求单源最短路 时间复杂度 : O((N + M)logN) [代码]
阅读全文
摘要:[题目链接] https://codeforces.com/contest/960/problem/F [算法] 记fi表示以第i条边结束最长的路径 可以用线段树优化该dp , 注意动态开点 时间复杂度 : O(MlogN) [代码]
阅读全文

浙公网安备 33010602011771号