BZOJ 3238 差异
看这个式子其实就是求任意两个后缀的LCP长度和。前面的len(Ti)+len(Tj)求和其实就是n(n−1)(n+1)/2,这个是很好推的。。
任意两个后缀的LCP长度和很容易想到构造 height 数组,然后问题就变成了所有区间的最小值的和。
这是个套路题,可以单调栈,但是其实分治也很好写!
设我们要求的区间是[l,r]我们可以找出其中最小值所在的位置,这个可以ST表快速求,然后从这个位置进行分治。
这样的分治每进行一次,总有效的元素数量会减少1,因此复杂度是O(nlogn)的。
开始有个地方漏了 1ll
。。。
cpp
1 |
|