数据结构篇

数据结构

队列

字符串

  • 经典trick:一个字符串中的 "01" 和 "10" 子串个数是否相同只取决于这个字符串开头和结尾的字符是否相同。
    二进制转化
  • 括号序列
    合法的括号序列:令"("=1,")"=-1
    1.和为0,左右括号数量相同
    2.所有的前缀和大于等于0
    6447. 最长的括号匹配
    Bracket Counting:结合该性质的状压

字符串哈希:模板题,必会

爪痕,强颜欢笑,并非是爱的某物:循环节很好找,从后往前枚举,然后验证,关键在对比字符串用到哈希,高效判重.

KMP:Nex数组是,前缀和后缀相同的最长长度,但前缀和后缀不能是整个子串本身。

周期:经典题,题解,另:"爪痕,强颜欢笑,并非是爱的某物",也可以使用KMP解决
寻找字符串:考察对KMP字符串nex数组的理解

字典树

其实就是归并前缀建树的操作

AcWing 142. 前缀统计: 与模板相反的,建树末端记录次数+1,统计时枚举所有前缀,总和答案

哈希

线段树/树状数组

  1. 进阶模板:
  • 树状数组 2:利用差分达到区间加+k的操作,利用树状数组迅速查点
  • 线段树 2: 重点是先乘后加,加深你对laze tag的理解
  1. 新定义
    线段树的应用不仅在于查询区间和,区间最小/大值,还可以其他你需要的值
    - 区间gcd
    - D. Gifts Order题解
    - 更改区间字符
    [蓝桥杯 2022 国 AC] 替换字符/G. Mass Change Queries
    - 总结:这种不是像板子一样的使用线段树,而是要思考线段树上,子节点与父节点传递关系,例如lazy的传递,从而高效的利用线段树解题

  2. 离线/在线处理
    这两个算法有时涉及区间反复的修改,查询...
    而查询分离线和在线,离线查询可以最后给出全部回答,在线则必须立即给一个回答,两者均有不同的技巧:

    • 离线
      离线有时可利用不同询问中,重复的信息以便高效回答:
      例题:

      1. P1972 [SDOI2009] HH的项链
        这里给定询问区间,由上述离线查询的核心思想,我们可以询问顺序排序,改成以r值从小到大的排序.由于我们只考虑种类,所以只保留尽可能靠右的不同种类的贝壳,只要在每次查询就能保证答案不重.
        类似的题:数对统计
        以上两题的详细题解
    • 在线

树链剖分

基环树

posted @ 2025-09-28 17:50  归游  阅读(11)  评论(0)    收藏  举报