Codeforces Round 864 (Div. 2)
评价:A~E 感觉出的挺一般,特别是 D 怎么放这种暴力题,场上我还没调出来,F 没看。但是 Orz rui_er。
A
在一个点周围放障碍即可。
B
求出最少需要的操作次数 ,若 就无解,否则若 为偶数只能任选一个格子翻偶数次,即有解当且仅当 ;若 为奇数可以一直翻中间格子,恒有解。
C
问 ,此时得到了 ,再问 ,此时可以得到 ,则答案为 或 。问 ,若返回值非 那么答案就是 ,否则是 。
注意一开始的 时要特判,此时已经确定横纵坐标之一了,再问一次 (或 )就可以得出答案。
D
暴力 set
维护每个点的重儿子, 操作只会进行 次修改。
E
考虑将每个 一直 得到的所有数从小到大写成一个序列,则问题可以被简化成:
给定 个长度不超过 的序列,有两种操作:
- 删除 序列的末尾元素(如果序列只有一个元素就不删)
- 查询 序列的
考虑所有序列总长为 ,删除操作时暴力枚举 到 即可,使用并查集维护每个元素下一个非 元素的位置。
考虑从末尾删元素只会对 在长度方面有影响,所以可以认为是静态查询。
既然是静态,那么对于每个位置预处理出最大的 表示 在第 位相等。询问直接枚举 ,最大的满足 且 的 就是 。
实现时需要一个线段树维护序列长度的区间 和区间和。时间复杂度 。
F
考虑建出 重构树和 重构树,满足 重构树上 是 在原树路径上点权最小值, 上是最大值。
令 为满足第一个条件的点对数量, 为满足第二个条件的点对数量, 为两个条件都满足的点对数量,则 。
就是每个点祖先数量和, 就是满足 树上 为 祖先, 树上 为 祖先的 ,树状数组 dfs 序即可。
考虑加点,以该点为端点的向上路径满足第二个条件,只需要让它不满足第一个条件,容斥减去即可。
时间复杂度 。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现