模拟赛记录
9.2
烂完了,一道题都不会做。但是打完感觉收获挺多的。
T1 P16540 [EGOI 2026] 披萨大师 / Ovenmasters
场上只写了个跟整解没啥关系的 \(O(nm)\)。不知道怎么优化,所以应考虑把操作刻画下来。因为放披萨的顺序与披萨编号大小密切相关,所以考虑将放披萨这个过程放到数轴上。手完一点数据后就容易发现本题最关键的性质:每个桌子上披萨编号的相对大小始终不变。
然后剩下的就很自然了。因为我抄的洛谷 DengDuck 大佬的 题解
总结:本题我就卡在没有将放披萨的操作放到数轴上考虑,之后的观察及优化其实都是显然的。
T2 P4732 [BalticOI 2015] Editor
暴力 \(n^2\) 是显然的,但是继续优化就没啥思路了,所以思考题目性质。
假设撤销操作 \(i\) 撤销的操作是 \(j\),那么显然操作完 \(j\) 后和操作完 \(i\) 前 \(j-1\) 个操作的状态是一样的,然后 \(j\) 是撤销状态。然后考虑 \((j,i)\) 的状态,因为操作 \(i\) 撤销的是 \(j\),所以这个区间的操作要么处于撤销状态要么优先级 \(>i\),这也就是说后面的撤销错做不可能撤销 \((j,i)\) 里的操作,因为撤销 \(i\) 一定更优。
经过上面的分析,我们可以发现第 \(i\) 位的答案和第 \(j-1\) 位的答案是相同的。于是我们就只关心求出每一个 \(i\) 的 \(j\),而我们在找操作 \(i+1\) 的答案时查找 \(j\) 的区间是 \(1 \sim i\),而 \([j,i)\) 的操作是不可能成为答案的,所以我们只需要用主席树维护操作级别来实现这个过程。查询 \(j\) 直接主席树二分即可。
总结:本题直接遍历每个撤销操作影响的节点时间复杂度不对,但其实是容易想到观察操作 \(i\) 和 \(i\) 直接影响的操作 \(j\) 这两个操作后序列状态的关系的。需要选手仔细一些。
T3 P9261 [PA 2022] Płótno
收获:欧拉公式:
其实在初一第一天数学作业里就推过了
直接维护连通块个数十分困难,所以要考虑转化连通块个数,于是想到上面的欧拉公式。如果直接把环当成链做,会发现会且仅会在只有一个大环的时候出错,特判一下即可。
然后对于这种有多维的查询自然应该想到扫描线思想,考虑对于每个 \(r\) 求出其每个可能 \(l\) 的贡献和。因为我们是从左到右扫 \(r\) 的,所以可以维护出每个 \(l\) 和当前 \(r\) 形成的值域的连通块数。暴力维护是 \(n^2\) 的,而我们需要实现区间加,查询区间 \(=x\) 的个数,分块即可。块长取 \(\sqrt{nk}\) 是时间复杂度最优,为 \(O(n\sqrt{nk})\)。
总结:
-
欧拉公式
-
扫描线思想:扫一维 \(r\),连通块用数据结构维护。
T4 忘了不会。
比赛总结
可以说这个分我用一个小时就足够了,主要是卡在 T1,没花太多时间思考后面的题。改完前三题后其实我发现前三题都是可做的,因为思想算法我都是见过的,但可能在给我足够的时间也想不出来。以后还需多练思维题。

浙公网安备 33010602011771号