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})\}\)的计算方法要记得
posted @ 2022-02-17 17:24  qwq_123  阅读(40)  评论(0编辑  收藏  举报