LGP2336口胡
SAM:线段树是我双手的延伸
这句话相当有道理
考虑容斥。设 \(a_i\) 和 \(b_i\) 是第 \(i\) 个喵星人的姓和名,我们对于两个串分别求答案,再减去同时被两个串包含的询问串数量。
我们同时建立三个广义 SAM:只包含 \(a\),只包含 \(b\) 和 \(a,b\) 都包含。
只包含一个串:
首先我们先对广义 SAM 线段树合并,处理出每一个等价类包含哪几个串。
询问有多少个串包含了询问串,答案就是等价类的大小。
如果是 \(a,b\) 都包含的那个广义 SAM,在线段树合并的时候需要注意一下第一个串和第二个串都必须有才行。
然后我们再对所有询问串建立 ACAM。然后相当于询问若干个点到根节点信息之并。这个老套路了,排序一下 LCA 就完事了。