ARC102D Revenge of BBuBBBlesort!
记录:给定长度为
- 选择
使得 且 . 交换 。
判定最终能否将其排成升序。
某次操作完成后,从
整个序列的逆序对个数减少了
又能发现,奇偶性不同的位置无法互相移动,故要将奇偶分别取出,判定是否都为 奇数/偶数。
又能发现,每次操作中,奇数部分或偶数部分的逆序对减少
这得出一个必要条件:奇数部分和偶数部分的逆序对的和是整个排列的逆序对的
下面证明上述条件同时也是充分的。
记整个排列的逆序对个数为
对奇数部分和偶数部分进行冒泡排序,共有
这些交换完成后,整个序列都是有序的,故逆序对个数减少了
每次操作中逆序对个数至多减少
需要求逆序对,复杂度为