zoukankan      html  css  js  c++  java
  • 后缀数组刷题总结

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

    T8:股市的预测

     先咕了

  • 相关阅读:
    JAVA 单例模式
    CodeForces Round #563 Div.2
    拓扑排序 JAVA
    初识 Dubbo
    CodeForces Round #567 Div.2
    Educational Codeforces Round 65 (Rated for Div. 2)
    最短路径问题
    C++使用fixed和precision控制小数和有效位数的输出以及setw()设置输出宽度
    poj3684(弹性碰撞模型)
    集合的整数表示
  • 原文地址:https://www.cnblogs.com/AthosD/p/12088542.html
Copyright © 2011-2022 走看看