• 【WC笔记】字符串前沿算法


    Q1

    对于给定的字符串,求本质不同的子串数。

    A1

    在加入 $s_l$ 时,考虑 $s[l:r]$ 的上一次出现是 $s[k:k+r-l]$,那么应该在线段树上 $[r,k+r-l]$ 这个区间 $+1$。

    那么假设路径 $(x,y)$ 上的点都满足 $r_u=z$,且 $len[fa[x]]=a,space len[y]=b$,

    那么对线段树的贡献是一个类似平行四边形的加法,修改比较显然。

    查询 $s[l:r]$ 的本质不同的子串数的话,在假如 $s[l]$ 后查询线段树的第 $r$ 个位置即可。

    Q2

    对于给定的字符串 $s$,求 $s[l:r]$ 的后缀树节点数。

    source:《后缀树节点数》命题报告及一类区间问题的优化——陈江伦

    A2

    建出后缀树

    Q3

    这个 $idea$ 比较简单就直接放在一个题目里说了。

    维护一个字符串 $s$,支持在 $s$ 的某个位置插入一个字符串,删除 $s$ 某一段的字符串。

    可以看成是一个普通的文本编辑器。

    由于在文本编辑器里进行搜索的时候我们都是一个一个字母键入的,为了模拟这一过程,每次询问给出一个询问串 $p$,对于每一个 $1le ile |p|$,你需要回答 $p[:i]$ 在 $s[l:r]$ 中出现了多少次。

    只需要三个操作都比暴力快即可($O(|s|$)。

    A3

    块状链表

    Q4

    给定一个字符串 $s$,每次 $O(1)$ 询问 $s[l:r]$ 的最大后缀。

  • 相关阅读:
    Git学习
    flask学习5 错误页面
    flask学习4-会话
    flask学习3
    线性代数复习
    flask学习2
    flask学习1
    windows下安装easy_install,pip,及flask入门教程链接
    MacOS Terminal调用Python代码
    [java] 类变量初始化顺序
  • 原文地址:https://www.cnblogs.com/scx2015noip-as-php/p/wc20190126.html
Copyright © 2020-2023  润新知