数据结构
文章平均质量分 54
Defener
这个作者很懒,什么都没留下…
展开
-
Codeforces 1479 D Odd Mineral Resource
题面此题树上不带修,查询路径信息,时限较长,可以树上莫队。利用树上莫队的传统方法,先树分块,对询问排序,然后再执行类似普通莫队的操作即可。但这里的修改操作并不好处理,于是在外层套一分块。每次修改就先修改单点的奇偶性,再修改块内奇数的总数。查询时用普通分块查询方法即可。时间复杂度 O((n+q)n)O((n+q) \sqrt{n})O((n+q)n),空间复杂度 O(n+q)O(n+q)O(n+q)#include<stdio.h>#include<algorithm>#i原创 2021-02-08 10:22:38 · 364 阅读 · 1 评论 -
基础 DFS序、树链剖分
DFS序和树链剖分都是在树的前提下才有效的。DFS序DFS,即对树进行DFS时遍历的顺序。记录每个点被遍历之前遍历过的点数 ininin 和遍历完以该点为根的子树后遍历过的点数 outoutout。若点 vvv 为 uuu 子树中的点,则一定满足 inu⩽inv⩽outuin_u \leqslant in_v \leqslant out_uinu⩽inv⩽outu。因此任意一点 uuu 的子树可以用区间 [inu,outu][in_u,out_u][inu,outu] 来表示。求DFS序模板原创 2020-11-14 19:16:17 · 208 阅读 · 0 评论 -
线段树优化建图 树上的最短路
题目描述题目中树边为双向边,之后增加的边为单向边。题目要求树上两条链中的点两两连边,显然不能通过。对于链的问题,考虑树剖。将剖出来的重链用线段树优化建图,条链对应 O(log22n)O(log_2^2n)O(log22n) 个线段树节点,两两连边增加 O(log24n)O(log_2^4n)O(log24n) 条边,最后跑Dijkstra时间复杂度为 O(mlog25n)O(mlog_2^5n)O(mlog25n)。每次加边增加一个点,将第一条链对应的线段树节点连向这个点,再由这个点连向所有第二原创 2020-10-27 20:49:02 · 267 阅读 · 0 评论 -
模拟赛 生成树
题目描述给定 nnn 个点,第 iii 个点有一个非负点权 aia_iai。这 nnn 个点连成了一张无向完全图,其中第 iii 个点和第 jjj 个点连的边长度为 aia_iai 按位异或 aja_jaj。现在要求出这张无向完全图的最小生成树。1⩽n⩽200000,0⩽ai⩽10737418231 \leqslant n \leqslant 200000,0 \leqslant a_i \leqslant 10737418231⩽n⩽200000,0⩽ai⩽1073741823时间限制2s原创 2020-10-22 20:33:40 · 206 阅读 · 0 评论 -
联合省选 2020 冰火战士
冰火战士题面每次注册或取消,都是在对应温度值的下标修改能量值。同时维护能量值的前缀和。每次比赛的能量值为冰火能量取最小乘二。随着温度升高,冰队的能量值不会降低,火队的能量值不会升高,具有单调性。因此考虑二分温度。每次二分都更新答案,若冰队能量值小于火队,则将温度调大;否则将温度调小,并找出某个时能量值最高的温度。但这样二分并不能求出最佳温度。所以需要再次二分温度,此时的温度小于等于之前二分的温度或答案等于实际答案则将温度调大,否则调小。此题温度规模过大,需要离散化。时间复杂度O(q2log2q)O(原创 2020-06-23 19:57:31 · 488 阅读 · 0 评论 -
树状数组上二分
树状数组+二分考虑一个简单的问题,维护一个数组,支持每次修改一个数的值,保证每时每刻每个数都为非负数。每次查询求前缀和kkk lower_bound 的值。对于修改,可以用树状数组、线段树等数据结构维护。二分查找可以在[l,r][l,r][l,r]的范围上二分答案,mid=⌊l+r2⌋mid = \lfloor \frac{l+r}{2} \rfloormid=⌊2l+r⌋,验证midmidmid的前缀和是否大于kkk,并调整midmidmid。时间复杂度O(log22n)O(log^2_2n)O原创 2020-06-23 18:54:02 · 3400 阅读 · 1 评论