ARC102D Revenge of BBuBBBlesort!

记录:给定长度为 的排列 , 可以进行任意次如下操作:

  • 选择 使得 . 交换

判定最终能否将其排成升序。

,时限


某次操作完成后,从 变为

整个序列的逆序对个数减少了 个。

又能发现,奇偶性不同的位置无法互相移动,故要将奇偶分别取出,判定是否都为 奇数/偶数。

又能发现,每次操作中,奇数部分偶数部分的逆序对减少

这得出一个必要条件:奇数部分和偶数部分的逆序对的和是整个排列的逆序对的

下面证明上述条件同时也是充分的。

记整个排列的逆序对个数为 ,奇数部分得逆序对个数为 ,偶数部分的逆序对个数为

对奇数部分和偶数部分进行冒泡排序,共有 次交换。

这些交换完成后,整个序列都是有序的,故逆序对个数减少了

每次操作中逆序对个数至多减少 ,由于 ,故每次操作中逆序对个数的减少量都达到上界,也都满足操作所需的条件。

需要求逆序对,复杂度为