这是一篇 DDP 做法的题解。
首先需要想通的一个点就是最值一定出现在端点处,否则区间长度变化而极差不变,会导致答案更劣。
设最值所在的位置为 l , r l,r l,r,则会有两种情况:
-
若最大值在最小值左侧,则答案为 a l − a r − ( r − l ) = ( a l + l ) − ( a r + r ) a_l - a_r - (r - l) = (a_l + l) - (a_r + r) al−ar−(r−l)=(al+l)−(ar+r)。
-
若最大值在最小值右侧,则答案为 a r − a l − ( r − l ) = ( a r − r ) − ( a l − l ) a_r - a_l - (r - l) = (a_r - r) - (a_l - l) ar−al−(r−l)=(ar−r)−(al−l)。
不难发现我们只需要维护 a i + i a_i + i ai+i 和 a i − i a_i - i ai−i 即可。
当本题不存在修改操作时,就是 虹色的北斗七星。设 f i , 0 f_{i,0} fi,0 表示 [ 1 , i ] [1,i] [1,i] 中 a i + i a_i + i ai+i 的最大值, f i , 1 f_{i,1} fi,1 表示 [ 1 , i ] [1,i] [1,i] 中 a i − i a_i - i ai−i 的最小值, f i , 2 f_{i,2} fi,2 表示 [ 1 , i ] [1,i] [1,i] 中答案的最大值。于是我们可以得到转移方程:
{ f i , 0 = max { f i − 1 , 0 , a i + i } f i , 1 = min { f i − 1 , 1 , a i − i } f i , 2 = max { f i − 1 , 2 , f i − 1 , 0 − ( a i + i ) , ( a i − i ) − f i − 1 , 1 } \begin{cases} f_{i,0} = \max \ \{\ f_{i - 1,0},a_i + i\ \}\\ f_{i,1} = \min \ \{\ f_{i - 1,1},a_i - i\ \}\\ f_{i,2} = \max \ \{\ f_{i - 1,2},f_{i - 1,0} - (a_i + i),(a_i - i) - f_{i - 1,1}\ \} \end{cases} ⎩ ⎨ ⎧fi