后缀数组刷题总结

Posted athosd

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了后缀数组刷题总结相关的知识,希望对你有一定的参考价值。

T1:Sandy的卡片

做这道题时对$height[]$理解不深刻,导致一晚上没$A$掉这道题

显然是把差值当成字符数组,把串连起来处理出$height[]$

之后二分,开一个栈记录存储出现的元素,只要元素个数大于等于$n$即可判断合法

T2:喵星球上的点名

延续上一道题的套路,把名字和询问连成一个串

之后对于每个询问的起始位置二分出左右能做贡献的区间

现在问题转化为m个区间,求每个区间的不同颜色个数以及每个颜色的出现次数

可以用莫队解决

(然而二分完直接暴扫也可以$AC$)

T3:字符串

 直接做的话前一个串有长度的限制,考虑二分答案来消除限制

之后便可以找到能贡献答案的区间查询区间内是否有$[a,b-len+1]$

便是主席树的板子

(这道题直接扫合法区间可以比主席树快$7000ms+$)

T4:差异

 思路很简单,找出每个$height$成为最小值的区间计算答案即可

T5:相似子串

首先一个子串一定是后缀的前缀

所以$height[]$处理完之后相当于把子串也排好序了

直接二分便可以找出排名为i的子串

第一问直接查,第二问二分长度后再查,没必要把串反过来或者用hash

T6:品酒大会

四次理解错题意后还是痛苦$AC$了

最好想的思路便是维护最大(小)次大(小)值每次合并区间时硬查更新

但是发现并不需要维护次大(小)值,只需要把两个区间内的最大*最大,最小*最小更新答案即可

其他的情况一定在原来合并区间时被统计过

注意求解第一问时$height[1]$是没有直接贡献的应该把它跳过

T7:外星联络

虽然放在了后缀数组(二)里,但是的确是个板子题

对于每个后缀,只需要统计$[h[i-1]+1,h[i]]$在后面出现了多少次

加上2便是答案

以上是关于后缀数组刷题总结的主要内容,如果未能解决你的问题,请参考以下文章

剑指Offer刷题总结

回文自动机刷题总结

冲刺大厂之 Java 刷题总结

leetcode之模拟刷题总结2

8月leetcode刷题总结

LeetCode刷题总结之双指针法