今天用脑子把树链剖分补完了,没有写代码,简单来说说吧。
碰到了一道题,要求从 a a a走到 b b b,找出两个点 x , y x,y x,y满足 d i s ( a , x ) < d i s ( a , y ) dis(a,x)<dis(a,y) dis(a,x)<dis(a,y)使 w [ y ] − w [ x ] w[y]-w[x] w[y]−w[x]最大。这里用树链剖分把树上问题划归到序列上。对于序列上的话,可以考虑用线段树维护。从 [ L , R ] [L,R] [L,R]可以分为 [ L , m i d ] [L,mid] [L,mid]和 [ m i d + 1 , R ] [mid+1,R] [mid+1,R]各自内部的最大值以及一个在左边区间一个在右边区间。这样只要维护一个区间内最大值,最小值,以及顺差最大值,逆差最大值(即答案)。因为树上从左向上再从右向下与反过来的是不一样的,在序列上是完全相反的过程,所以要有个顺差以及一个逆差。