Solution
先统计出原序列的逆序对,这部分可以用树状数组/归并排序完成。
随后我们只关心逆序对的奇偶性。
对于三种操作分别考虑:
操作1,交换两个数字,逆序对的奇偶性改变。
操作2,翻转序列,设当前的逆序对为 , 翻转后为 ,长度为 , 考虑到翻转前后序列的逆序对满足 ,如果 是偶数,必为两奇或两偶,翻转不改变。如果 是奇数,奇偶性必改变。于是问题转化成计算 的奇偶性即可。
操作3,4本质是一样的。只考虑左移序列,设当前序列为一个排列(可以看做把原序列离散化)首数字为 ,长度为 ,显然后面可以构成逆序为 个,那么左移后他变成了序列最后一个元素,对于前面的元素与他产生的逆序为 ,总的变化为 ,那么左移 次就是 ,注意 为每次的首个数字,严格来说是会改变的,但在本问题中不失一般性,发现其中 为偶数,不用考虑,只考虑 ,显然判断序列的长度和左移次数即可判断奇偶性是否改变。
Code
https://ac.nowcoder.com/acm/contest/view-submission?submissionId=47956786