题意
佳媛姐姐过生日的时候,她的小伙伴从某东上买了一个生日礼物。生日礼物放在一个神奇的箱子中。箱子外边写了一个长为 $ n $ 的字符串 $ s $,和 $ m $ 个问题。佳媛姐姐必须正确回答这 $ m $ 个问题,才能打开箱子拿到礼物,升职加薪,出任 CEO,嫁给高富帅,走上人生巅峰。每个问题均有
a
,
b
,
c
,
d
a, b, c, d
a,b,c,d 四个参数,问你子串
s
[
a
…
b
]
s[a \ldots b]
s[a…b] 的所有子串和
s
[
c
…
d
]
s[c \ldots d]
s[c…d] 的最长公共前缀的长度的最大值是多少?佳媛姐姐并不擅长做这样的问题,所以她向你求助,你该如何帮助她呢?
对于所有的数据,
1
≤
n
,
m
≤
100000
,
a
≤
b
,
c
≤
d
,
1
≤
a
,
b
,
c
,
d
≤
n
1 \leq n, m \leq 100000, \ a \leq b, \ c \leq d, \ 1 \leq a, b, c, d \leq n
1≤n,m≤100000, a≤b, c≤d, 1≤a,b,c,d≤n
题解
可以转化为
m
a
x
(
m
i
n
(
l
c
p
(
i
,
c
)
,
b
−
i
+
1
,
d
−
c
+
1
)
)
(
a
≤
i
≤
b
)
max(min(lcp(i,c),b-i+1,d-c+1))(a\le i\le b)
max(min(lcp(i,c),b−i+1,d−c+1))(a≤i≤b),
d
−
c
+
1
d-c+1
d−c+1可以最后考虑。
对于最小值最大问题,考虑二分答案
l
l
l,lcp
的问题考虑SA
,用height
数组计算在SA
上可取的区间,只需判断这个区间内满足
a
≤
i
≤
b
a\le i\le b
a≤i≤b的
i
i
i的最小值,而大于
b
b
b的点不会影响,离线一下从大到小加入,保证目前有的点都不小于
a
a
a,用线段树维护即可。