ARC120D

题面

link

​ 给一个长度为\(2N\)的序列\(A\),定义一个长度为\(2N\)的合法括号序列的得分为:对于每对配对的括号的\(|A_i-A_j|\)和。

​ 输出得分最高的任意一个合法括号序列。

题解

​ 主要是对\(|A_i-A_j|\)的分析,设\(B_i\)是讲序列按\(A_i\)排序之后\(i\)所在的位置,发现只要让每一对匹配的\((i,j)\)满足一个\(B_i>n\)的与一个\(B_j\le n\)。这样的答案就会有最大值。

​ 解释:设\(A_i>A_j\),发现\(|A_i-A_j|=A_i-A_j\)即我们会选出\(n\)\(i\)产生\(A_i\)的贡献,选\(n\)\(j\)产生\(-A_j\)的贡献,想让答案最大,就是让\(A_i\)尽可能大,\(A_j\)尽可能小。即\(B_i>n,B_j\le n\)

​ 之后就可以将\(B_i>n\)的看成白色点,\(B_i\le n\)的看成黑色点,只要将一对相邻的黑白点同时删掉就可以了。因为黑白球数量相等,可以保证一直有解。

启发

  • 对带绝对值的贡献问题,考虑什么情况下绝对值会最大。
posted @ 2022-02-17 17:19  qwq_123  阅读(37)  评论(0编辑  收藏  举报