7.14 模拟赛

https://hszxoj.com/d/hztg/contest/6a54ef1c32254a287b334703

这场同样 T1,T2 较为简单,但相较于前两场略有难度.

(本人花 2.5 小时通过 T1,T2 但事实上不应花这么多时间,应该只需要 1~1.5 小时,导致后面 T4 没时间拼暴力)

场上觉得 T3 不可做,思考 10 分钟之后果断打了 28 分暴力(事实上优化一下就能拿到 52 分)

T4 场上觉得这应该是一个使用 树剖模拟 zkw 线段树的过程,觉得自己代码能力不足,只打了 48 分(事实上卡卡常可以拿到 56 分)

混乱邪恶

原题是 2021 年数学高联二试 的 T4,是原题的弱化版.

给出构造过程:

这里是发现了一种情况:
\(\sum a_i< n\)\(0\le a_i\)\(\sum a_i\) 为偶数),则必然存在一种构造方式:

证明:
\(n=1\),由于 \(a_i<n\),因此 \(a_i=0\),则成立.
\(n>1\),若 \(a_i=1\),因为 \(\sum a_i\) 为偶数,因此可以通过相邻两项作差得到最终答案.
\(n>1\),若存在 \(a_i>1\),则可以令 \(a_{max}\)\(a_{min}\) 作差,可以归约到 \(n'=n-1\) 的情况.

那么,如何将题目中的情况归约到引理的情况?
考虑将 \(a_i\) 排序,若 \(n\) 为奇数,则补上 \(0\).
\(a_i\) 相邻两项作差为 \(d_i\),这样有:\(\sum d_i \le m-\frac{n}{2}<n\),即为引理中的情况.

如何使用代码实现?
你可能会想到模拟上面的过程,使用 set 辅助维护,最终统计 \(a_i\) 的符号,时间复杂度为 \(O(n\log n)\).
但事实上不需要最大值与最小值,只需要满足作差的两项差不为 \(0\) 即可,直接在数组上合并即可,时间复杂度为 \(O(n)\).

校门外歪脖树上的鸽子

给出广义线段树,区间加,区间查,不进行懒标记下放.

可以看出如果没有懒标记的处理,这其实是树上修改问题,因此考虑树剖维护.

由于区间操作普通线段树不太好思考,故从 zkw 线段树的角度考虑,发现这就是一条树链上的所有 左子树/右子树 的修改.

将线段树重剖,树链上维护不在重链上的 左子树/右子树,轻链单独统计贡献,时间复杂度为 \(O(n\log^2 n)\).

(总共调了 7 个小时)

posted @ 2026-07-15 09:11  zhoumengxuan  阅读(6)  评论(0)    收藏  举报