6.24 考后总结
时间安排
7:10--7:30 读题,感觉都是 ds 。
7:30--9:00
T1,第一反应是扫描线,但是不好维护。考虑单个元素的贡献,分类讨论,用树状数组维护即可。
9:00--10:00
T3,对于 \(n\leq 70000\) 有显然的 \(O(n\sqrt n\log)\) 或者 \(n\sqrt{n\log n}\) 的做法。瓶颈在于如何维护查询快中小于等于某个值的数的数量。
10:00--12:00
T2,首先可以暴力 \(n^2\) 建图,形成一个 dag ,那么答案显然是最长链的长度。考虑优化,只有一个串显然放在 sam 上,那么多个串显然可以放在广义 sam 上。考虑怎么建图,瓶颈在于某个结点非最长串跳到另一个节点非最长串怎么办。
回顾反思
T2:
建出广义 sam 之后,瓶颈在于某个结点非最长串跳到另一个节点非最长串怎么办。
然而由于出点必然是被入点的子串,所以由某点非最长串跳出去一定比由某点最长串跳出去劣。也就是这种情况一定不优。
忽略了最优性上的分析。
T3:
赛时瓶颈在于如何维护查询快中小于等于某个值的数的数量。
赛时我对每个块开了个树状数组,当然也可以开 vector 每次重构 sort 。不过带 log 过不去。
考虑对于每个块与其涉及的询问归并,可以均摊复杂度。
不过对于散块不太好实现。
考虑对操作分块,令操作的端点为关键点分块,这样每一轮块数为根号级别,同时每个操作涉及的块都是整块,简单了许多。
常数巨大,跑不过暴力