题意

给定一个长度为 \(n\) 的串 \(S\)。

定义 \(occ(T)\) 表示串 \(T\) 在 \(S\) 中出现的次数。

\(q\) 次询问,每次询问给定一个区间 \([l,r]\),查询 \(S[l,r]\) 的所有子串的 \(occ\) 之和。

\(1\le n,q\le 2\times 10^5\)

题解

学到了新技能,来记一下。

这是一道看起来很典的题目。但实际上并不好做。

先思考 \(n^2\) 做法(也是我的做法)。可以想到一种转化,即求 \(\sum\limits_{i=1}^n\sum\limits_{j=l}^r\operatorname{lcp}(S[i,n],S[j,r])\)。离线后可以做到 \(O(n^2)\)。但这种做法已无法优化。

换一种,定义 \(f(T)\) 为 \(T\) 的所有后缀的 \(occ\) 之和。建出后缀树,则若我们知道 \(T\) 在 \(\text{sam}\) 的节点,可以 \(O(1)\) 求。此时原式等价于 \(\sum\limits_{i=l}^rf(S[l,i])\)。因为 \(S[l,l],S[l,l+1],\dots,S[l,r]\) 在 \(\texttt{sam}\) 上是一条链,所以这种做法是 \(O(n^2)\) 的。

“链”的性质为接下来的优化创造条件。这里引进一种新科技:\(\text{DAG}\) 链剖分。我们想要这样的性质:\(\text{DAG}\) 上任意一条路径经过 \(O(\log P)\) 条链,其中 \(P\) 为路径总量,在 \(\text{sam}\) 上是 \(n^2\)。建链的方法如下:

  • 对所有节点,求以 \(i\) 为起点的路径数量 \(f_i\) 和以 \(i\) 为终点的路径数量 \(g_i\)。
  • 令 \(nxt_i\) 为所有 \(i\) 出点中 \(f\) 最大的点,\(pre_i\) 为所有 \(i\) 入点中 \(g\) 最大的点。
  • 若边 \((u,v)\) 满足 \(nxt_u=v\wedge pre_v=u\),则其为重边。否则为轻边。
  • 此时只保留所有重边,即可完成链剖。

证明一下上面的性质。若走一条轻边,必有 \(2f_v<f_u\vee g_v>2g_u\)。于是得证。

对于建链,另一种解释是:先由 \(nxt\) 建树,再由 \(pre\) 树剖。这样可以更直观地感受 \(\text{DAG}\) 链剖的妙处。

建出链后,利用前缀和进行优化,二分哈希找到何时跳出链。复杂度 \(O(n\log^2n)\)。

SOJ1737 题解的更多相关文章

  1. 2016 华南师大ACM校赛 SCNUCPC 非官方题解

    我要举报本次校赛出题人的消极出题!!! 官方题解请戳:http://3.scnuacm2015.sinaapp.com/?p=89(其实就是一堆代码没有题解) A. 树链剖分数据结构板题 题目大意:我 ...

  2. noip2016十连测题解

    以下代码为了阅读方便,省去以下头文件: #include <iostream> #include <stdio.h> #include <math.h> #incl ...

  3. BZOJ-2561-最小生成树 题解(最小割)

    2561: 最小生成树(题解) Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 1628  Solved: 786 传送门:http://www.lyd ...

  4. Codeforces Round #353 (Div. 2) ABCDE 题解 python

    Problems     # Name     A Infinite Sequence standard input/output 1 s, 256 MB    x3509 B Restoring P ...

  5. 哈尔滨理工大学ACM全国邀请赛(网络同步赛)题解

    题目链接 提交连接:http://acm-software.hrbust.edu.cn/problemset.php?page=5 1470-1482 只做出来四道比较水的题目,还需要加强中等题的训练 ...

  6. 2016ACM青岛区域赛题解

    A.Relic Discovery_hdu5982 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Jav ...

  7. poj1399 hoj1037 Direct Visibility 题解 (宽搜)

    http://poj.org/problem?id=1399 http://acm.hit.edu.cn/hoj/problem/view?id=1037 题意: 在一个最多200*200的minec ...

  8. 网络流n题 题解

    学会了网络流,就经常闲的没事儿刷网络流--于是乎来一发题解. 1. COGS2093 花园的守护之神 题意:给定一个带权无向图,问至少删除多少条边才能使得s-t最短路的长度变长. 用Dijkstra或 ...

  9. CF100965C题解..

    求方程 \[ \begin{array}\\ \sum_{i=1}^n x_i & \equiv & a_1 \pmod{p} \\ \sum_{i=1}^n x_i^2 & ...

  10. JSOI2016R3 瞎BB题解

    题意请看absi大爷的blog http://absi2011.is-programmer.com/posts/200920.html http://absi2011.is-programmer.co ...

随机推荐

  1. react项目中如何出现config文件夹

    答案:运行  npm run eject  即可出现config文件夹 原因: 在package.json中:只有三个依赖,分别是react,react-dom,react-scripts,依赖为什么 ...

  2. 2022的ShellCTF之web_WP

    Extractor: 考点是SQL注入,不过数据库不是mysql,而是sqlite 首先尝试了:1' or 1=1# 尝试1' or 1=1 -- 发现有东西,使用 :order by 判断列表,知道 ...

  3. gitee删除上传到的远程分支的提交记录

    在实际开发中可能也经常会遇到写完代码后提交到远程分支但发现写的提交信息有误,不符合规范.由于自己的gitee账号可能没有修改提交记录的权限.因此最佳的解决方法是,撤销本地分支当前的提交记录,将代码回滚 ...

  4. [OpenCV实战]3 透明斗篷

    目录 1寻找和存储背景帧 2红色区域检测 3提取红色区域 4背景帧红布区域替换当前帧红布区域. 5工程代码 参考 弄出哈利波特电影里一样效果的透明斗篷.也就是一个视频里,将红布弄成透明.类似下面的效果 ...

  5. RocketMQ Compaction Topic的设计与实现

    本文作者:刘涛,阿里云智能技术专家. 01 Compaction Topic介绍 一般来说,消息队列提供的数据过期机制有如下几种,比如有基于时间的过期机制--数据保存多长时间后即进行清理,也有基于数据 ...

  6. (8)go-micro微服务Mysql配置

    目录 一 gorm介绍 二 gorm安装 1.1 下载依赖 1.2 使用MySQL驱动 三 CURD操作 1. 查询 1.1 单行查询 1.2 多行查询 2. 插入数据 3. 更新数据 4. 删除数据 ...

  7. [C++标准模板库:自修教程与参考手册]关于auto_ptr

    什么是auto_ptr指针 auto_ptr是这样一种指针:它是"它所指的对象"的拥有者,所以,当身为对象拥有者的auto_ptr指针被摧毁时,该对象也会被摧毁,auto_ptr要 ...

  8. P8622 [蓝桥杯 2014 国 B] 生物芯片

    简要题意 有 \(N\) 个二进制数,编号为 \(1\sim N\),初始时都是 \(0\).博士进行了 \(N-1\) 次操作,在第 \(i\) 次操作时,会将 \(1\sim N\) 中所有编号为 ...

  9. XCTF-web新手区

    前言 刷题平台:攻防世界 web简介 WEB是CTF竞赛的主要题型,题目涉及到许多常见的WEB漏洞,诸如XSS.文件包含.代码执行.上传漏洞.SQL注入.还有一些简单的关于网络基础知识的考察,例如返回 ...

  10. youtube-dl下载太慢了,我选yt-dlp

    前言 最近过年嘛,过年前照例来下载一些贺岁歌曲,现在国内没啥人做贺岁专辑,这方面还得看马来西亚华人,他们每年都有出专辑,质量很不错! 国内平台自然是没有(或者不全的),需要在YouTube下载~ 之前 ...