码迷,mamicode.com
首页 > 编程语言 > 详细

后缀数组刷题总结

时间:2019-12-24 10:15:04      阅读:80      评论:0      收藏:0      [点我收藏+]

标签:左右   原来   现在   一个栈   排名   header   后缀   nbsp   元素   

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便是答案

后缀数组刷题总结

标签:左右   原来   现在   一个栈   排名   header   后缀   nbsp   元素   

原文地址:https://www.cnblogs.com/AthosD/p/12088542.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!