Loading

xinyoudui 平行线

https://xinyoudui.com/ac/contest/74700BFF30008E90734486/problem/42598

”我与 OI 会是平行线吗?“

考虑从解决冒泡排序类问题的本质入手,将操作分摊到每一个元素上。

\(b_i\)\([1, i]\) 中比 \(a_i\) 大的数的个数。

进行一个暴力你会发现原理是,进行第一次操作后 \([1, k]\)\(b\)\(0\),并且进行操作到 \([i - k + 1, i]\) 时,\([i - k + 1, i - 1]\) 是前 \(i - 1\) 中最大的 \(k - 1\) 个,如果这个时候 \(b_i = 0\) 那么不会变化,否则会将其插入一个堆结构里,此时 \(i\) 会向前移动 \(\min (k - 1, b_i)\) 位,\(b_i\) 也会少这么多。

所以对于一个元素,移动 \(\frac{b_i}{k - 1}\) 向上取整次操作才能移动到原本的位置(有可能是 \(0\) 次,因为它借助别人的排序到了后面,我们这里只计算向前的步数)。

除了每轮操作的第一次操作以外,每次都会将 \(b_i\) 操作一次,对于每个元素,你要判断一下最后一次操作有没有操作到前 \(i\) 个以内,可以减少一次操作。

posted @ 2025-11-18 16:09  Alexande  阅读(6)  评论(0)    收藏  举报