ARC119E
题面
link
有一个序列\(A\),定义其权值为相邻元素的差值的绝对值之和。现在可以整体翻转一个子区间,最小化权值。
题解
首先可以发现,对一段区间\([l,r]\)翻转只会让\(|A_l-A_{l-1}|+|A_{r+1}-A_r|\)变成\(|A_{r}-A_{l-1}|+|A_{r+1}-A_l|\)。设\(B_{i,0}=A_{i-1},B_{i,1}=A_i\),设所有\(B_{i,0}\le B_{i,1}\)的为一类点,所有\(B_{i,0}> B_{i,1}\)为二类点。
考虑交换\([l,r]\)带来的贡献,首先发现如果\(l\)为一类点,\(r-1\)为二类点交换一定不会更优(还是大的\(A\)减去小的\(A\))。所以我们可以单独考虑所有的一类点。
由于此时\(B_{i,0},B_{i,1}\)的大小关系确定了,我们可以去掉绝对值,即交换\([l,r]\)的贡献为
\[\begin{aligned}
&B_{l,1}-B_{l,0}+B_{r+1,1}-B_{r+1,0}-|B_{r+1,0}-B_{l,0}|-|B_{r+1,1}-B_{l,1}|\\
=&2(\min\{B_{l,1},B_{r+1,1}\}-\max\{B_{l,0},B_{r+1,0}\})
\end{aligned}
\]
所以我们需要找到一对\(i,j\)使\(\min\{B_{l,1},B_{r+1,1}\}-\max\{B_{l,0},B_{r+1,0}\}\)最大,这个可以将\(B_{i,0}\)排序,对于每个\(i\in[1,n]\),找到\(val_i=\max_{j<i}\{B_{j,1}\}\),答案就是\(\max\{\min\{val_i,B_{i,1}\}-B_{i,0}\}\)(这里的思路就是确定\(\max\{B_{l,0},B_{r+1,0}\}\),尽可能找到\(\min\{B_{l,1},B_{r+1,1}\}\)的最大值)
二类点的处理类似,最后需要处理交换区间包括\(1\)和\(n\)的(因为\(1\)和\(n\)交换后的贡献不同)。
启发
- \(\max\{\min(B_{l,1},B_{r+1,1})-\max(B_{l,0},B_{r+1,0})\}\)的计算方法要记得