CF1322

Codeforces Round #626 (Div. 1, based on Moscow Open Olympiad in Informatics)

1|0A

si 为前缀左括号个数减右括号个数,每一段 si<0 的区间都需要操作,操作还需包含一段负区间末尾 si=0 的位置。

2|0B

考虑第 k 位,将所有数在模 2k+1 意义下考虑,若两个数的和 [2k,2k+11][2k+2k+1,2k+22],则其在第 k 位为 1,通过双指针统计个数,按奇偶性计算即可。

3|0C

S(x) 为右部图的点 x 在左部图的与其相连的点集,给每个点集 S(x) 初始权值为 cx。将相同的点集进行合并,合并后的权值为相同的点集权值和。最终答案为所有剩余点集权值的 gcd,这里不考虑空集。

4|0D

先将序列翻转,将单调不升变为单调不降。设 fi,j 为考虑了攻击力 i 的选手,且攻击力为 i 的选手有 j 个的最大收益,得转移为:

fli,j=max{fli,j1+clisi}fj+1,k2=max{fj,k+k2cj+1},j[li,n+m]

这样转移就能保证单调不降了。这里对 k 的枚举范围进行限制,当前攻击力为 li 时,对于 li 枚举前 n 项,对于 li+1 枚举前 n2 项,对于 li+2 枚举前 n4 项, ,这里相当于模拟了所有攻击值的二进制加法,因为对于每个 i,其有效的状态数为 n+n2+n4+n8++1+1++1less than m=O(n+m),所以复杂度为 O(n(n+m))

5|0E

先考虑 01 序列,发现 0011 都是稳定的,因此只需处理 01 交替的段。考虑枚举一个分界线 k,将 k 的位置都看作 0,所有 >k 的位置都看作 1,若位置 i01 表示下的最终结果为 0,则位置 i 最终的值 k,否则 >k。得当分界线从 k 枚举到 k+1 时,位置 i 的结果从 0 变成了 1,则位置 i 最终的值为 k

所有分界线得出的序列中 01 交替的段的最长长度除以 2 为操作次数,因为每次操作后 01 交替的段的长度会减少 2

考虑求出每个位置向两边扩展 01 交替的段的最长长度,根据该长度分类讨论即可得出当前位置的最终的值。可以通过 ST 表预处理最值,然后二分求解最长长度。

6|0F

不难发现答案上界为 n,其可以通过数学归纳法证明,去掉一个叶子就为一棵 n1 个点的树,该叶子要么最小,要么最大。

先考虑判定无解的情况。先将树定为有根树,考虑树上的一条边 (fa,x),若其没有被路径覆盖,则可以不考虑这条边,若其被覆盖了,那么该边一定满足这两种状态之一:cx<cfa,cx>cfa

一条路径就是使若干边的状态相同或者相反,那么可以用并查集来判定是否有解。

发现答案具有单调性,可以二分求解,考虑用树形 DP 来判定二分。当前二分的值为 k,设 fx 为边 (fa,x) 为状态一时 cx 的最小值,不难发现当边 (fa,x) 为状态二时 cx 的最大值为 k+1cx,将 x 子树内值域取反即可。

考虑 x 的子树 ycx 的限制:

(x,y) 没被覆盖,则不考虑。

若覆盖 (x,y) 和覆盖 (fa,x) 的路径有交,即 (x,y)(fa,x) 的状态有关联,那么已知 (fa,x) 为状态一时,就能确定 (x,y) 的状态了。(x,y) 为状态一时,得 cx>cy,得其对 cx 的限制区间为 [cy+1,k](x,y) 为状态二时,得 cx<cy,得其对 cx 的限制区间为 [1,cy1]

若覆盖 (x,y) 和覆盖 (fa,x) 的路径无交,则 y 子树内的状态选择和 (fa,x) 的状态无关,考虑 y 子树内的状态的某种选择对 cx 的限制区间为 [l,r],得另一种状态对 cx 的限制区间为 [k+1r,k+1l],得 y 子树对 cx 的限制区间为 [l,r][k+1r,k+1l]

那么将 x 的所有子树对 cx 的限制区间取交,限制下的集合最小值即为 fx。发现 [l,r][k+1r,k+1l] 不一定是一段连续的区间,因此要用线段树扫描线来维护。

实际上可以更简便,发现若 [l,r][k+1r,k+1l] 不是一个连续的区间,则其一定是两个以 k+12 为对称轴的区间,那么可以维护中间空出的部分一定包含 k+12。因此维护区间的交和中间空出的部分的并即可线性转移。

构造方案时,可以在树上差分打标记,若边 (fa,x) 为状态二,则将子树取反。

(这题代码在有了)


__EOF__

本文作者lhm_
本文链接https://www.cnblogs.com/lhm-/p/13845757.html
关于博主:sjzez 的一名 OI 学生
版权声明:转载标明出处
声援博主:希望得到宝贵的建议
posted @   lhm_liu  阅读(441)  评论(2编辑  收藏  举报
编辑推荐:
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 使用C#创建一个MCP客户端
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示