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\)

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

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

posted @ 2019-02-18 13:58  Owen_codeisking  阅读(287)  评论(0编辑  收藏  举报