bzoj2555】的更多相关文章

[BZOJ2555]SubString(后缀自动机,Link-Cut Tree) 题面 BZOJ 题解 这题看起来不难 每次要求的就是\(right/endpos\)集合的大小 所以搞一个\(LCT\)维护一下\(SAM\)的\(Parent\)树就好了 但是代码一点都不好写(我还是对着黄学长的调的...) 于是乎我也学着魔改了一下\(LCT\) #include<iostream> #include<cstdio> #include<cstdlib> #include…
http://www.lydsy.com/JudgeOnline/problem.php?id=2555 (题目链接) 题意 给出一个初始串,维护两个操作.在原串后面加入一个字符串:询问某个字符串在原串中出现的次数.强制在线. Solution 对于加入操作,我们动态构造后缀自动机,每次就将添加的节点${parent}$树上到根节点的路径上的节点的${right}$集合大小全部加${1}$.树上路径区间加法,有因为这是个动态树,所以我们用${LCT}$维护${parent}$树就可以了. 细节…
[BZOJ2555]SubString Description 懒得写背景了,给你一个字符串init,要求你支持两个操作         (1):在当前字符串的后面插入一个字符串         (2):询问字符串s在当前字符串中出现了几次?(作为连续子串)         你必须在线支持这些操作. Input 第一行一个数Q表示操作个数         第二行一个字符串表示初始字符串init         接下来Q行,每行2个字符串Type,Str         Type是ADD的话表示在…
BZOJ2555. SubString 要求在线询问一个串在原串中出现的次数,并且可以在原串末尾添加字符串 如果没有修改的话,考虑建出\(parent\)树之后统计每个\(endpos\)节点的\(right\)集合大小,现在要求动态添加字符,那么由于\(parent\)树的形态会变,所以用\(LCT\)来维护\(parent\)树,具体就是增删\(link\)边 \(LCT\)一直以初始状态为根,每次提出来初始状态到当前节点的链然后更新一条链上的值即可,根一直没变,不需要\(makeroot\…
2555: SubString Time Limit: 30 Sec  Memory Limit: 512 MBSubmit: 1936  Solved: 551[Submit][Status][Discuss] Description 懒得写背景了,给你一个字符串init,要求你支持两个操作    (1):在当前字符串的后面插入一个字符串    (2):询问字符串s在当前字符串中出现了几次?(作为连续子串)    你必须在线支持这些操作. Input 第一行一个数Q表示操作个数    第二行一…
SAM+LCT维护parent tree版本 虽然说子树维护那套理论需要ETT 不过parent tree的根是固定的,所以用lct加一些奇怪的乱搞就行了 //随手拖个SAM的板子和LCT的板子,然后再加几句话就写完了[手动滑稽 #include <iostream> #include <cstdio> #include <cstring> #include <cmath> #include <cstdlib> #include <algo…
0.题目很短,就不概括了 给你一个字符串init,要求你支持两个操作 (1):在当前字符串的后面插入一个字符串 (2):询问字符串s在当前字符串中出现了几次?(作为连续子串) 你必须在线支持这些操作. 1.分析: a)首先我们来看40%的数据,我们可以建立后缀自动机,对于插入串,我们直接暴力的insert,不要怂...询问的话我们就在后缀自动机上的tranc上面跑..然后暴力的统计right集合的数量,遍历这个子树,因为每一次都会更新,所以不能预处理,然后40pts get,时间复杂度O(n2)…
开始时间:19:40 完成时间:21:00 传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=2555 题目大意:(1):在当前字符串的后面插入一个字符串          (2):询问字符串s在当前字符串中出现了几次?(作为连续子串) 题解:最近在写后缀自动机,求一个字符串中出现了几次就相当与其right集合大小,直接上parent树,因为后缀自动机构造特性,可能在parent树改变边,于是用lct维护: 代码: #include<algo…
题目描述 (1):在当前字符串的后面插入一个字符串 (2):询问字符串s在当前字符串中出现了几次?(作为连续子串) 你必须在线支持这些操作. 题解 做法很自然,建出后缀自动机,维护每个节点的right集合,对于询问直接在sam上跑就好了. 然后它是在线的,得用LCT维护. 然后细节极多,首先必须维护好树的形态,也就是说不能makeroot,所以我的link就长这样. inline void link(int x,int y){ access(x);splay(x);access(y);splay…
算是学会sam了吧…… 原题: 懒得写背景了,给你一个字符串init,要求你支持两个操作        (1):在当前字符串的后面插入一个字符串        (2):询问字符串s在当前字符串中出现了几次?(作为连续子串)        你必须在线支持这些操作.   字符串最终长度 <= 600000,询问次数<= 10000,询问总长度<= 3000000 恩 因为sam添点本来就是动态的所以动态往后连接串就不用管了 问题是维护right集的大小,如果新添了一个点np那么从np一直到s…