2018年8月21日训练日记

今天的主要任务是看饶齐的博客中有关线段树的题解。

线段树:区间三更新区间查询三值、找到线段树中>=给定值的第一个元素位置并更新该点、查找并更新从左到右第i个1、最大连续目的子区间长度(区间合并)、区间置0/1,区间异或、区间覆盖染色问题(一般要维护cover[i]信息)、向量区间旋转问题、扫描线(一般这类求平行坐标轴矩形面积的问题可以用矩形离散化来做)。

KMP(O(n+m)):有关前缀后缀的匹配问题、最短周期长度及数量。(长文本的单模板匹配问题)

字典树(O(nL)):有关前缀的一些问题。判断一个单词是否属于字典。(单个单词(短文本)多模板匹配问题)

AC自动机(O(n+∑i=1,m length(si))):判断哪些单词在文本中出现了多少次。(长文本的多模板匹配问题)

常和dp结合,一般来说dp[i][j]表示走到ac自动机的i节点,状态为j时的答案。。。有时候还要进行状态压缩或者结合矩阵快速幂。

后缀数组(代码看不懂,先总结能解决的题目,复杂度O(mlogn)):找不重叠的两个相同子串、找可重叠至少出现K次的子串、找字符串的不同子串个数、最长回文子串(也可用马拉车算法)、两个串的最长公共连续子串的长度、求n个字符串中超过一半字符串中的最长公共连续字串是什么,如果有多解,按字典序输出、求在每个串中至少出现2次且不重叠的子串最大长度。

明天看Treap和splay,争取能够完全理解(最好能写出代码)。有时间继续看图论。

 

你可能感兴趣的:(训练日记)