InsertionSort2

[ARC162B] Insertion Sort 2

本题还是对于不变量的考察,但是比较明显。

首先两个数捆绑插到任意一个位置可以等价为偶数次相邻交换((因为你每次可以这样:比如现在是 a<b<c,a,b,c,你可以交换 a,c,变为 c,b,a,然后交换 ab,变为 c,a,b,这样你就会往后挪动一次,往前同理①)。然后我们知道每次相邻交换可以消去/产生一个逆序对,所以奇偶性会改变,改变偶数次就不变,而最后逆序对为 0,所以如果初始时逆序对数为奇数,一定无解。

然后我们考虑到对于偶数个逆序对的初始序列一定有解。

只需重复以下过程即可:

找到最小的 m,使得 Pmm。如果不存在这样的 m,则 P 已经是升序,结束过程。

对于满足 Pk=mk,如果 k<N,则进行操作 i=kj=m1。(相当于将这个数接到已经排好序的数后面)否则,首先进行操作 i=N1j=N3,然后进行操作 i=kj=m1。(相当于将它移到倒数第二个位置,这样他就可以接,否则中间隔着一个数)

上述过程在 m=N1 时可能无法成功(因为最后前面的都排好序,如果这样交换破坏了前面),但是由于逆序对数为偶数这个条件,m=N1 是不可能的。(其实到 n2 确定完之后 n1,n 都不需要了)。此外,通过一次操作,m 必定会增加至少 1(或 P 变为升序),因此上述过程最多重复 N2 次。

因此,P 可以始终通过不超过 2000 次操作排列为升序。

code

对于①研究时可能有用的例子:

[1 4] 5 2 3

5 [1 4] 2 3(5,1;1,4交换)

5 2 [1 4] 3(2,1;1,4交换)

本文作者:wscqwq

本文链接:https://www.cnblogs.com/wscqwq/p/17495003.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   wscqwq  阅读(32)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起