给定字符$S$,$q$个询问,询问$str[l..r]$,这个子串第$k$次出现的位置,不存在输出$-1$。($Strlen(S),q,k\leq 10^5$)
对于重复字串问题,选择后缀数组。对于与$suf(l),lcp$长度$\leq r-l+1$,一定出现在排好名的后缀数组里的某个区间。即寻找$i\in[下界,上界],sa[i]$排名在区间第$k$位。离散化下即可。
注意
- 上下界二分即可找到
- 计算$lcp(x,y)$,不需要像之前模版取$sa[x],sa[y]$,直接计算即可。
代码
1 |
|