Public NOIP Round #7
A
答案为 。先把 排序,枚举 后双指针统计答案即可。时间复杂度 。
B
若 就在它们之间连一条无向边。因为保证序列没有相同元素所以图是若干条链。
容斥,相当于断开若干条边,然后把剩下的链拼接在一起,其中长度 的链要乘一个 的系数(顺序正着或者反着均可)。预处理出长度为 的链断成 条链的贡献系数,最后直接 DP 即可。
时间复杂度 。
C
考虑固定了 如何算 。不失一般性假设 。
设 为必须是白色的点(其所有子树大小均 ),分类讨论。
- 若 ,把 中的点删除后黑点只能在其中一棵子树内, 为大小 的子树个数。
- 若 , 只能为 或 。 当且仅当存在一个点,它有两棵子树 ,另外还有一棵子树 。感性理解一下,若这个条件不满足那么黑色连通块相当于被白色连通块堵住了,要么在它前面要么在它后面,不可能跨过它,所以等价类数量为 。
得到这个结论后计算答案是简单的。仍然分两类讨论。
- 若 ,从大到小枚举 ,并查集维护删除 后各个连通块的大小。线段树维护 即可。
- 若 ,我们预处理出每个点前三大的子树大小,然后算出第二大子树大小 时第三大子树大小的最大值 。那么 时 , 时 。
这样只计算了 ,把答案乘 ,最后减去 即可。
时间复杂度 。
D
考虑 的部分分。
拆贡献,转 ,枚举一个 ,令 ,把所有 的情况的 的个数求和即可。
差分,转化为计算 。
发现只有 的冒泡排序过程是非常好看的,大致形如每个 每轮都会往前移一格。所以我们不妨统计 的个数和。发现这个就是 中 的个数对 取 。
这个是很好用主席树算的。大概就是求出区间中第 大的数,设其为 ,那么 时贡献为区间 的个数(这个等于 ,可以主席树计算), 时贡献为区间长度。
时间复杂度 。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统
· 【译】Visual Studio 中新的强大生产力特性
· 2025年我用 Compose 写了一个 Todo App