0%

CF-1077-C. Restricted Sorting(当发现一个条件取决于两个数字的时候,可以想想,是不是可以只取决于一个数字?)

题目大意

给定长度为nn的数组aa。对于整数kk,我们称其为piggy,当且仅当通过执行以下操作任意次数(可能为零),可以将aa以非递减顺序排序:

  • 首先,选择两个索引iijj1i<jn1 \le i < j \le n),使得aiajk|a_i - a_j| \ge k;

  • 然后,交换aia_iaja_j

您需要确定最大的piggy整数kk。如果不存在这样的整数,则输出1-1

思路讲解

不难注意到,我们可以选用最大的数字或者最小的数字去做中转站,

image

乍一看,好像选择最小的数字,还是选择最大的数字,取决于两个数字 totonownow?实际上不是的,我们完全可以换着来,比如说:

image

这样子就实现了 totomnmnnownow 用这个 mxmx,反之亦然,完全可以只根据一个数去选择

okay,那就行了。我们发现,这个 totonownow 一定都是和有序序列中的同位置值不一样的点,因此,我们的答案其实就是:(其中 SS 为所有和有序序列中的同位置值不一样的点的下标集合)

ansminiS(max(mxai,aimn))ans\gets\min_{i\in S}(\max(mx-a_i,a_i-mn))

当然,也可以使用代码中的这个贪心实现。

AC代码

AC
https://codeforces.com/contest/2188/submission/360594620

心路历程(WA,TLE,MLE……)