具体问题是:
在维护 endpos 集合的时候,我们同时想知道相邻元素差的最大值。
一个应该错误的思路是:
线段树合并维护的时候,记录每个线段树节点的最小值/最大值,合并的时候用两边的答案和右儿子的最小值-左儿子的最大值来更新。
我认为这是错的,因为在 sam 上,一个等价类的所有子儿子的 endpos 集合的确不相交,但是每个 endpos 的最小值/最大值构成的区间是有交的。
更暴力的做法应该可以 set + 启发式合并,每次插入元素就更新这个差的最大值。
这样应该是两只 log 的。
追问:如果线段树真的不能维护这个最大值的话,那么是否有比双 log 更优的做法?