[BZOJ5416][LOJ2719][NOI2018]冒泡排序[DP+组合数学]

\(S=\frac{1}{2}\sum_{i=1}^n|i-p_i|\),每次swap最好情况下会让 \(S\) 减少 \(2\),所以如果交换次数恰好是 \(\frac{1}{2}\sum_{i=1}^n|i-p_i|\),那么每个数都不能向 \(p_i\) 的反方向移动,也就是排序过程中,某个数字不能同时有往后和往前移动两个操作。

冒泡排序的过程是顺序比较每个数字和后面的数字,对于每个数字,如果往后移,前面肯定没有比它更大的数,所以这个数不会再往前移;如果往前移(前面有更大的数)同时后面有更小的数,这个数字就一定还会往后移。

所以一个序列不“好”的条件是存在某个位置 \(i\) 前面有比它更大的数,后面有比它更小的数,即这个序列中存在长度 \(>2\) 的下降子序列

猜你喜欢

转载自www.cnblogs.com/storz/p/10422006.html