(1):在当前字符串的后面插入一个字符串 (2):询问字符串s在当前字符串中出现了几次?(作为连续子串) 字符串长度<=6e5,询问总长度<=3e6 分析: 考虑建个sam,然后把slink连起来就形成了一个前缀树 对于每个询问的串,就是求出它在sam里对应的点,然后在slink树种该点子树的size就是答案 用lct维护slink树即可 ...
}IvoidAc(RI x,CI v)//Access求LCA的过程,注意更新节点信息与答案{ RI s;for(x=p[x],s=0;x;x=O[s=x].F)S(x), T.Add(O[x].V,SAM.l[x]),O[x].S[1]=s;Upt(s,v); }IintQuery(CI x){returnT.Qry(x);}//询问答案}LCT;intmain(){ RI Qtot,i,j,x;for(F.read(n,Qtot)...
\(LCT\)维护\(parent\)树 考虑之前提到过的离线,则我们只需考虑每次加入一个新的节点对答案造成的影响。 结合题意转化,则其实也就相当于要求新加入的这个点与之前所有点的\(LCA\)的\(Len\)。 注意\(LCA\),便可以想到\(LCT\)中的一个技巧:\(Access\)求\(LCA\)。(关于这个技巧,有一道挺好的例题:【BZ...
简单卸卸,将询问离线下来,像HH的项链一样对于每一个子串记录其出现的最右位置,通过后缀自动机可以将过多的子串压起来,但暴力修改颜色肯定不行,用 lct 像树点涂色一样维护即可