题意:一个字符串,两种操作,强制在线:
1、在当前字符串后接上一个字符串
2、查询某一串在当前字符串的出现次数
维护每一个子串的出现次数,很容易想到SAM维护right集合大小。在SAM上运行这个串,在next边形成的树结构中,到达节点为根的子树的节点个数就是答案。
暴力做法自然就是每次新加入一个字符,沿着next边向上更新节点信息。鉴于这是一个树结构,我们考虑用动态树来加速。
但是好像要维护子树大小?虽然这样可做,但是有没有更简洁的方法?我们注意到这道题是没有换根操作的,树本身的形态不会改变,于是我们可以类似与暴力,将子树大小当做信息记在节点上。每次连next边的时候cut、link一下改变树的形态,暴力更新信息变成打tag就好。由于节点信息是独立的,所以连pushup都不要。注意每次在复制、输出节点信息时别忘了relax一波。