给出一个字符串$S$,给出$Q$个操作,给出$L, R, T$,求字典序最小的$S[l,r]$的子串,并且它的字典序严格大于$T$如果无解输出$−1$
贪心的去考虑一定是$T$的前缀(包括空串)+一个字母
建立$SAM$,暴力地跑前缀,如果前缀没有出现在$[l,r]$区间内,则$break$。否则对所有存在的前缀暴力枚举字母$[t[i+1]-‘a’+1,’z]$,而且越是长的前缀+字母越优。
- 考虑$endpos$是表示集合里$S$出现的位置。即$trans[u][id]$搜到$endpos$的时候此时$S$出现的位置为$endpos$。初始化每个前缀出现的位置加到对应的点上,后缀链接建立树,树上启发式合并。预处理即可。
代码
1 |
|