Two strings 的另一种解法

Two strings 的另一种解法

论文中的解法是离线插入 (O(log n)) 询问 (O(log n)) 的,不过我发现有一种离线插入 (O(1)) 询问 (O(log n)) 的方法。

首先我们离线处理,将两个串连在一起。我们以 (ababa)(aba) 为例:

比如现在我们要询问 (A)([1,4])(B)([1,2])

我们先在 (rnk[7]) 开始倍增,使得 ([l,r])(height>=2)

然后我们在这个区间中找多少 (1leq sa[i]leq 3)。为什么是 (3) 呢?因为 (3=5-len_b+1)。显然答案为 (2)

询问就是主席树上区间求和,询问是 (O(log n)) 的,插入是 (O(1)) 的。

原文地址:https://www.cnblogs.com/owencodeisking/p/10395258.html