QOJ.ac

QOJ

Type: Editorial

Status: Open

Posted by: wangmarui

Posted at: 2026-06-24 10:50:46

Last updated: 2026-06-24 11:21:06

Back to Problem

New Editorial for Problem #5096

本题解所有下标从 $0$ 开始。

先考虑不是环咋做。

考虑到每次操作是将 $a_{i-1},a_{i+1}$ 减去 $a_i$,将 $a_i$ 减去 $2a_i$,找到其不变的量,令 $b_i = \sum_{j=0}^{i} (-1)^j a_j$,那么当我们操作 $a_i$ 时,对于 $b$ 序列的贡献的体现就是由 $b_{i-1},b_i,b_{i+1}$ 变为了 $b_i,b_{i-1},b_{i+1}$。那么题目中的限制相当于 $b$ 序列严格单调递增或严格单调递减,严格的原因是因为若 $b$ 序列中有两个相同的数则 $a$ 序列中有 $0$,就爆炸了。

那么这部分就是一个冒泡排序的过程,求一下逆序对数量即可。

考虑是环咋做。

注意到我们不是很好刻画对 $a_0,a_{n-1}$ 进行操作的过程,经典地,考虑断环成链,无限延长序列 $b$,具体地,令原序列 $b$ 的下标为 $[0,n-1]$,则对于任意 $i$ 有 $b_i = b_{i-n} + b_n$。

这样刻画后,一次操作就变为了交换所有属于 $\bmod n$ 相邻的同余系的下标,而我们要将序列 $b$ 单调递增或递减,我们钦定 $b_{n-1} > 0$(若 $b_{n-1} < 0$,则将 $b$ 序列所有数 $\times -1$ 后是等价的),则我们对于两两不同的同余系 $i,j(i < j)$ 求出其贡献(这里我们可以认为只保留序列 $b$ 中所有在同余系 $i,j$ 中的数):

  • 若 $b_i < b_j$,则会造成 $\displaystyle \lfloor \frac{b_j - b_i}{b_{n-1}} \rfloor$ 的贡献。
  • 若 $b_i > b_j$,则会造成 $\displaystyle \lceil \frac{b_i - b_j}{b_{n-1}} \rceil$ 的贡献。

考虑为啥能取到这个下界,还是考虑这本质上是一个冒泡排序的过程,因此若序列 $b$ 没排序,就一定能找到一个位置使其可以进行交换,因此是能取到这个下界的。

朴素实现是 $O(n^2q)$ 的,考虑到一次操作后 $b_{n-1}$ 是不变的,且在 $b$ 序列中的体现是单点修的性质(在 $n-1$ 操作也是一样的因为你发现贡献同时抵消掉了)于是我们可以根据 $i, \displaystyle \lfloor \frac{b_i}{b_{n-1}} \rfloor, b_i \bmod b_{n-1}$ 来进行三维偏序计算其贡献,时间复杂度变为 $O(q \log^2 n)$,可以通过此题。

Comments

No comments yet.