标签:左右 原来 现在 一个栈 排名 header 后缀 nbsp 元素
做这道题时对$height[]$理解不深刻,导致一晚上没$A$掉这道题
显然是把差值当成字符数组,把串连起来处理出$height[]$
之后二分,开一个栈记录存储出现的元素,只要元素个数大于等于$n$即可判断合法
延续上一道题的套路,把名字和询问连成一个串
之后对于每个询问的起始位置二分出左右能做贡献的区间
现在问题转化为m个区间,求每个区间的不同颜色个数以及每个颜色的出现次数
可以用莫队解决
(然而二分完直接暴扫也可以$AC$)
直接做的话前一个串有长度的限制,考虑二分答案来消除限制
之后便可以找到能贡献答案的区间查询区间内是否有$[a,b-len+1]$
便是主席树的板子
(这道题直接扫合法区间可以比主席树快$7000ms+$)
思路很简单,找出每个$height$成为最小值的区间计算答案即可
首先一个子串一定是后缀的前缀
所以$height[]$处理完之后相当于把子串也排好序了
直接二分便可以找出排名为i的子串
第一问直接查,第二问二分长度后再查,没必要把串反过来或者用hash
四次理解错题意后还是痛苦$AC$了
最好想的思路便是维护最大(小)次大(小)值每次合并区间时硬查更新
但是发现并不需要维护次大(小)值,只需要把两个区间内的最大*最大,最小*最小更新答案即可
其他的情况一定在原来合并区间时被统计过
注意求解第一问时$height[1]$是没有直接贡献的应该把它跳过
虽然放在了后缀数组(二)里,但是的确是个板子题
对于每个后缀,只需要统计$[h[i-1]+1,h[i]]$在后面出现了多少次
加上2便是答案
标签:左右 原来 现在 一个栈 排名 header 后缀 nbsp 元素
原文地址:https://www.cnblogs.com/AthosD/p/12088542.html