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 个小时)

浙公网安备 33010602011771号