题解:CF2057D Gifts Order

这是一篇 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) alar(rl)=(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) aral(rl)=(arr)(all)

不难发现我们只需要维护 a i + i a_i + i ai+i a i − i a_i - i aii 即可。

当本题不存在修改操作时,就是 虹色的北斗七星。设 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 aii 的最小值, 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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值