bzoj上没有题面。。(百度有hhh)
这看上去就很后缀数组啊。。
先处理出后缀数组(都快忘了咋整了)。。
也就是处理出sa,rank,height三个数组
由后缀数组的性质,两个后缀的LCP是路径上height值取min
第i个位置的height值,能用作LCP的区间[L,R],满足区间最小height为height[i]
那么在[L,i)中选一位置为左端点,在[i,R]中选一位置作右端点,LCP = height[i]
可以用单调队列求出每个位置能使用的区间[L,R]
小心重复计算
可以这样,对于位置i,使劲向右找,直到找到一个位置k,height[k] < height[i],用k - 1作右端点
对于位置i,使劲向左找,直到找到一个位置k,height[k] <= height[i],用k + 1作左端点
处理出了所有的L[i],R[i],第一个询问就简单了,乘一下即可
第二个询问,可以查询出左边的最大最小值,有边的最大最小值,瞎逼乘一乘,
苟蒻强行套一个RMQ,其实可以线性,不过这样好写。。。
于是常数巨大233
此题边界略啰嗦。。。。调了有点久
#include
#include
#include
#include
#include
#include
#include
#include