反正投不了了,随便写写(其实这是卡常记录)
算法
查给定字符串的出现次数常用 SAM,就是查 SAM 对应节点的 parent 树子树里有多少个主链上的节点,向后加字符串可以直接记录节点时间戳等实现。
但是这题有强制在线,所以要支持的操作就是在 parent 树上加点和更换父节点,查询子树和,显然可用 LCT,但也可以用平衡树维护 dfs 序实现,更换父节点即区间平移。
我写了个 fhqTreap,发现用它做这个常数比 LCT 还大,开 O2 都只有45pts。
考虑优化常数,对于新建节点原本是先直接并在 dfs 序的最后,找到父节点时再插到对应区间。于是新建节点时暂不加进平衡树,找到父节点了才直接加到父节点后面,于是就不开 O2 最劣解卡过了。
code
#include
#include
#include
#include
#include
#include