P5335 [THUSC 2016] 补退选
推歌推过了今天就不再推了。
考虑暴力,最朴素的暴力就是每次查询都把所有插入操作扫一遍统计前缀。
全都扫一遍太暴力了!既然是字符串题,那么一些基本的数据结构肯定是需要的。比如我们就可以建立一颗字典树,并在这颗字典树上操作。
每次插入字符串 \(S\) 时我们考虑 \(S\) 影响的前缀,发现只有 \(S\) 的前缀会被 \(S\) 影响,那么我们直接在 \(S\) 前缀的每个节点上打个标记记录其有一个该前缀的字符串。如果删去的话把标记去掉一个就好了。
我们发现我们要查询第一次超过某个值的时间。于是我们可以给每个节点维护一个 vector,每次达到了新的最大值就把当前的时间插入进去,查询的时候直接输出即可。
看起来还是很暴力!但是算一下复杂度,发现是 \(O(n|S|)\) 的,完全可以通过!
然后这个题就做完了。个人认为完全没有紫。

浙公网安备 33010602011771号