03 2024 档案
摘要:分析 考虑时光倒流。 对于需要合并的两个连通块 ,其合并之后的最远点对距离一定是合并之前的两组点对中产生的。在合并的时候枚举点对,取距离最大值即可。由于我们是倒着来的,所有连通块的最远点对距离最大值不减,所以能直接在合并之后取最大值。 维护连通块用并查集即可。复杂度 \(O(n\log
阅读全文
摘要:分析 考虑线段树。 分 统计节点懒标记,在每次询问之前统一下传 的修改懒标记, 是上一次询问的位置。 分 在统一下传的过程中打标记,如果当前节点的某个儿子所在子树中没有需要下传懒标记的节点,则不更新那个儿子的内容。
阅读全文
摘要:分析 考虑莫队。 对于 的下标集合 ,当其加入一个新的下标 时,这个新下标对答案的贡献分两种情况。 第一种, 最小。相邻从下标的间隔中产生的贡献是 \(\sum (|S_k|-i+1)\times(ans_{S_{
阅读全文
摘要:分析 考虑乱搞。 对于求次大值,用线段树维护就行了。记录下每个区间的最大、次大值。则两个子区间的父区间的最大值就是这四个最大的,次大值就是这四个次大的。复杂度 。 求次大值的出现次数,乱搞就行了。因为带修,带修莫队或者分块有些麻烦。其实用线段树就行。在维护区间最大、次大值的
阅读全文
摘要:分析 考虑 DP。 因为 ,我们可以直接枚举插针的位置。定义状态函数 表示在从左往右第 个小球的位置上插针的最小花费。 枚举该小球右边第一个插针的位置,则 到 的小球都会滚到小球 的位置。代价为 \(\s
阅读全文
摘要:分析 和 T5 差不多的思路。把所有的绿色格子看做图上的点,对于将每个绿色格子变成红色时连通块增加的数量,实际上就是无向图中删掉某个点连通分量变化量的问题。 对于删掉某个点后连通分量变化量,有三种情况: 节点是孤点,删掉后连通分量增加 。 节点是割点,删掉后连通分量增加其所在点双数量 \
阅读全文
摘要:分析 乱搞题。 右移若干次很显然可以破环成链,然后 指针在这个长度为 的序列上右移。每种状态的答案就是 的答案。 考虑相邻两种状态的变化量。设上一次 指向的值为 ,则到当前状态的变化量就是:\(-\operatorn
阅读全文
摘要:分析 通过题目我们可以发现,题目里唯一难受的限制就是最长增长部分的长度。我们不妨试试将其放进状态函数里。根据 LIS 的性质,若一个长度为 的子序列 满足 LIS,则必有 。我们定义 \(\mathit{f}_{i,x,y,
阅读全文
摘要:分析 思路不难想,我们对于第 个计划的时间,可以分成 和 两部分。用权值线段树维护,在第 天的时候就将该计划的内容加入权值线段树中,直到过了该计划的时间,也就是第 天,再将这个计划的内容删除。把每一天需要修改的内容存进 vector
阅读全文
摘要:分析 对于这道题,首先暴力找出任意两座城市之间的最短路,跑 次 BFS 就行。这里 BFS 的时候可以直接求第 座城市的坐标 到所有图上坐标的最短路,最后第 座城市到第 组城市的最短路就是 到 \
阅读全文
摘要:分析 按照 的奇偶分开考虑。 为奇数。一个好的节点有且仅有一个在任意两个有人的节点 的路径的交点上的最优位置。若该交点偏移 步,则必然会使路径长度和 。故期望为 。 为偶数。任意一个好的节点仍然在任意两个有人的节点
阅读全文
摘要:分析 线段树模板题。 一眼 DP。定义状态函数 表示前 个数中,必选 时 的最大长度。则有转移方程:\(\mathit{f}_i=\max\{f_j |((1\le j \le i-1 )\land (-k
阅读全文
摘要:分析 一眼 DP。 定义状态函数 表示后 位中,删掉或不删掉第 个数时,使后 个数满足条件的最小步数。 如果删掉第 个数,有转移方程:\(\mathit{f}_{i,1}=\min(\mathit{f}_{i+
阅读全文
摘要:分析 对于一个从小到大(按编号排序)的长度为 的序列 ,有性质:相邻两个数之差的绝对值为 的数量为 。 那么,对于这道题,能使环剪开一条边使其按编号排序,必有相邻两个 ,满足 的数量为 。注意
阅读全文
摘要:分析 没脑子的题目。 一眼换根 DP。定义 表示 到 为根子树中某一个节点的距离最大值; 表示 经过其父节点到某个节点的距离最大值。那答案就是 \(\max(\mathit{f}_i,\ma
阅读全文
摘要:分析 对于区间问题,考虑莫队。 和这个一样转化问题。 把树变成 DFS 序之后,在序列上询问区间就是普通莫队模板了。用 set 记录当前区间里存放的有序 。移动完指针之后的判断是否存在就直接在 set 里二分。复杂度虽然大了不止一点,但是 秒还是能过的。没有压力。 代码 #i
阅读全文
摘要:分析 考虑启发式合并。 统计 表示在 这个集合中,是 班的人数。 表示 所在集合下标。根据启发式合并模板,在保证是小集合往大集合合并的情况下,将每个小集合元素 所在的班级都在大集合的 里增
阅读全文
摘要:分析 一眼分块。 用值域分块来维护。先把所有的值离散化,使得至于不大于 。统计一下每个值的数量,每个块包含值的数量,每个块的价值和。修改值的时候先把原来值的数量,块包含的数量,块的价值剪掉被修改值的贡献,然后在新的值上面更新。修改数量直接改数量的变化贡献即可。 找前 大的值之和从值
阅读全文
摘要:分析 乱搞题。 的时候就可以考虑乱搞了。 发现每次操作 都会把上一次的操作 覆盖掉,那么第 个询问时树的颜色情况就是由前 个操作 决定。也就是说这个询问的内容变成了:在 为根的子树中,深度不小于 的节
阅读全文
摘要:分析 线段树。 每个节点维护两个值: 和 。判断字串是否是回文直接就是询问的答案维护出来的两个值是否相同。 首先想到用线段树暴力维护。第一个值很显然是两个儿子的第一个值加起来,第二个值是反着加起来。得到很酷的代码: il void up(int
阅读全文
摘要:分析 一眼 DP。 定义状态函数 表示在第 此比赛中,获胜者为 时的最大奖学金。把比赛过程看成一棵倒着的满二叉树,就能发现:第 场比赛只会是其左儿子为根的子树中叶子节点的某一个与其右儿子为根的子树中叶子节点的某一个进行比赛。然后就可以得到转移方程:$f_{
阅读全文