ABC 435 解题报告
A
略。
B
略。
C
记录当前可以弄倒的最远位置,记得和 \(n\) 取 \(\min\)。
D
考虑建反图,然后从每一个黑点开始 dfs 一遍,遇到黑点就停下(因为之后扩展到的点这个黑点一定也可以扩展到)。每个点至多被访问一次,均摊 \(O(n)\)。
E
先离散化:因为维护对象是区间,所以离散化时要给左端点加一,离散化后区间变为左闭右开区间。设 \(p\) 为坐标数组,那么 \(i\) 位置维护 \([p_i,p_{i+1})\) 被覆盖的情况。
然后因为只有覆盖操作,所以用并查集维护当前点下一个没有被覆盖过的点的坐标。均摊 \(O(n)\)。
F
如果你知道笛卡尔树,那么这道题就是建笛卡尔树后,记 \(f_u\) 表示 \(u\) 子树内到 \(u\) 的最长距离,转移就是 \(f_u=\max(f_{ls}+u-ls,f_{rs}+rs-u)\);
那么如果你和我一样不知道笛卡尔树,那么或许这是一个分治:考虑正在处理当前区间 \([l,r]\),那么用 ST 表找到当前区间最大值位置 \(p\),然后问题转化为在 \([l,p-1]\) 和 \([p+1,r]\) 内的子任务,时间复杂度为 \(O(n\log n)\)。

浙公网安备 33010602011771号