P9596 [JOI Open 2018] 冒泡排序 2 做题记录

P9596 [JOI Open 2018] 冒泡排序 2 做题记录

P9596 [JOI Open 2018] 冒泡排序 2 / Bubble Sort 2 - 洛谷 (luogu.com.cn)

Solution 1

结论:设 \(v_i=\sum_{j\le i} [a_j>a_i]\),序列 \(a\) 的代价为 \(\max\{v_i\}\)

对每个位置考虑,前面比它大的移到它后面之后才能轮到 \(i\) 向后移动,然后轮到它时后面如果有比它小的还需要移动一轮,所以 \(v_i=\sum_{j\le i} [a_j>a_i]+[a_i>(\min_{j>i} a_j)]\)

然后发现如果 \(i\) 后面有比它小的 \(i\) 一定不优,所以后面一项可以去掉,\(v_i=\sum_{j\le i} [a_j>a_i]\)

这个代价还是不好算,但由于只有后缀最小值有用,所以将 \(v_i\) 继续改为 \(\sum_{j=1}^n [a_j>a_i]-(n-i)\),这个就好维护了,上权值线段树即可。

Solution 2

结论:设 $a_i $ 排序后应该在的位置为 \(p_i\),则代价为 \(\max\{i-p_i\}\)

\(a_i\) 不是后缀最小值,那么它的 \(i-p_i\) 一定不优。

首先若 \(i<p_i\),那么它一定不会移动到 \(p_i\) 的右边,轮到它移动时一定已经归位,代价为 \(0\)

然后若 \(i>p_i\),那么前面比它大的位置向后移动时,一定恰好让它向前移动一个,轮到它移动时一定已经归位。

\(p_i\) 即为 \(a_i\) 在全局的排名,维护 \(i-p_i\) 的最大值,平衡树维护。

两个结论其实本质一样,殊途同归了。

posted @ 2025-11-06 20:15  XP3301_Pipi  阅读(7)  评论(0)    收藏  举报
Title