首先考虑最小化逆序对数量。容易发现,对于一对 (i,j)(i, j),它们是否产生逆序对是由 pi,pjp_i, p_j 中更大的那个取正还是取负来决定的,与更小的那个无关。于是令 Li=j<i[pj<pi]L_i = \sum_{j < i} [p_j < p_i]Ri=j>i[pj<pi]R_i = \sum_{j > i} [p_j < p_i],则答案为 min(Li,Ri)\sum \min(L_i, R_i)。假设我们现在正在计算 ansxans_x,即 pk=xp_k = x 的答案。

首先考虑 i=ki = k 时的贡献。枚举 [1,x1][1, x - 1] 里的数的分布情况,可以列出式子:

(x1)!(nx)!i+j=x1(k1i)(nkj)min(i,j)(x - 1)!(n - x)! \sum_{i + j = x - 1} \binom{k - 1}i \binom{n - k}j \min(i, j)

接下来考虑 iki \ne k 时的贡献。我们采用这样的想法:首先将 pkp_k 从序列中移除,算出贡献之后再将 pkp_k 插回原位置并且修正贡献。

移除 pkp_k 之后的贡献相当于没有固定任何位置的 n=n1n' = n - 1 的问题,我们对于每一个 ii 求出 min(Li,Ri)\min(L_i, R_i) 之和再相加:

i=1n1(n1i)(i1)!(n1i)!j=1imin(j1,ij)j=1imin(j1,ij)=i2i12\sum_{i = 1}^{n - 1} \binom{n - 1}i (i - 1)!(n - 1 - i)! \sum_{j = 1}^i \min(j - 1, i - j)\\ \sum_{j = 1}^i \min(j - 1, i - j) = \left\lfloor\frac i2\right\rfloor \left\lfloor\frac{i - 1}2\right\rfloor

这可以 O(n)\mathcal{O}(n) 计算。把这个式子计入每个 ansxans_x

考虑修正贡献。考虑当我们把 pk=xp_k = x 插回原序列对一个满足 pl=y>xp_l = y > x 的位置 llmin(Ll,Rl)\min(L_l, R_l) 的影响。影响显然是,如果 k<lk < lLl<RlL_l < R_l,或 k>lk > lRl<LlR_l < L_l,插入之后的 min(Ll,Rl)\min(L_l, R_l) 会比原来增加 11

枚举 kk 左右两边分别填了 i,ji, jy\le y 的数,则 y=i+j+1y = i + j + 1。如果 k<lk < l,那么 yy 在这 yy 个数中位置的排名应该 <y+12< \frac{y + 1}2;否则应该 >y+12> \frac{y + 1}2。可以得到确定 yy 的位置的方案有 ij2\left\lfloor\frac{|i - j|}2\right\rfloor 种。

可以发现列出的式子和 xx 是没有关系的,只要求 y>xy > x。列出式子:

(y2)!(ny)!i+j=y1ij2(k1i)(nkj)(y - 2)!(n - y)! \sum_{i + j = y - 1} \left\lfloor\frac{|i - j|}2\right\rfloor \binom{k - 1}i \binom{n - k}j

我们对每个 yy 求出这个,然后把它贡献到 x<yx < yansxans_x 上。

ij|i - j| 可以写成 i+j2min(i,j)i + j - 2\min(i, j)。那么 ij2\left\lfloor\frac{|i - j|}2\right\rfloor 可以写成 i+j2min(i,j)\left\lfloor\frac{i + j}2\right\rfloor - \min(i, j)。前者显然只和 i+ji + j 有关,可以提到求和外面去。

现在就只需要对于每个 xx 求出下面两个东西:

i+j=x(k1i)(nkj)i+j=x(k1i)(nkj)min(i,j)\sum_{i + j = x} \binom{k - 1}i \binom{n - k}j\\ \sum_{i + j = x} \binom{k - 1}i \binom{n - k}j \min(i, j)\\

前者显然是 (n1x)\binom{n - 1}x,不作解释。对于后者,我们可以直接钦定 i,ji, j 的大小关系并且做一个分治 NTT 来解决,时间复杂度为 O(nlog2n)\mathcal{O}(n \log^2 n)代码

然而我们有一个更高妙的做法可以做到线性。以下思路来自这篇题解

以下令 A=k1,B=nkA = k - 1, B = n - k。那么我们需要对所有的 ii 求这个。

j=0i(Aj)(Bij)min(j,ij)\sum_{j = 0}^i \binom Aj \binom B{i - j} \min(j, i - j)\\

直接暴力展开。

j=0iA!B!j!(Aj)!(ij)!(Bi+j)!min(j,ij)\sum_{j = 0}^i \frac{A!B!}{j!(A - j)!(i - j)!(B - i + j)!} \min(j, i - j)\\

一个很神奇的事情是,我们可以把分母里的阶乘重新配对。

A!B!i!(A+Bi)!j=0ii!(A+Bi)!j!(ij)!(Aj)!(Bi+j)!min(j,ij)A!B!i!(A+Bi)!j=0i(ij)(A+BiAj)min(j,ij)\frac{A!B!}{i!(A + B - i)!}\sum_{j = 0}^i \frac{i!(A + B - i)!}{j!(i - j)!(A - j)!(B - i + j)!} \min(j, i - j)\\ \frac{A!B!}{i!(A + B - i)!}\sum_{j = 0}^i \binom ij \binom{A + B - i}{A - j} \min(j, i - j)\\

可以发现后面一部分式子的组合意义就是,所有从 (0,0)(0, 0)(A,B)(A, B) 的路径与 x+y=ix + y = i 的交点的横纵坐标的 min\min 之和,记其为 f(i)f(i)

考虑 f(i)f(i1)f(i) - f(i - 1) 的意义:对于一条路径,记它与 x+y=ix + y = i 的交点的横纵坐标的 min\minp(i)p(i),则 p(i)p(i1){0,1}p(i) - p(i - 1) \in \{0, 1\}f(i)f(i1)f(i) - f(i - 1) 统计的就是满足 p(i)p(i1)=1p(i) - p(i - 1) = 1 的路径条数。

这张图是 A=8,B=6,i=6A = 8, B = 6, i = 6 的情况。显然每一条从 (0,0)(0, 0)(A,B)(A, B) 的路径都会恰好经过图中一条红色或蓝色的线段。而我们需要统计的就是经过红色线段的路径。考虑分别统计经过对角线上方、下方的红色线段的路径条数,它们的流程是相同的,这里拿对角线下方来举例。

可以发现,经过对角线下方的红色线段的路径条数就是从 (0,0)(0, 0) 走到 (A,B1)(A, B - 1)P(3,2)P(3, 2) 不在其上方(路径经过 PP 是允许的)的路径条数。这并不能直接 O(1)\mathcal{O}(1) 计算,但是随着 ii 的增加,PP 每次只会移动到相邻的位置,这对方案数的影响可以 O(1)\mathcal{O}(1) 计算。

做一个前缀和就可以 O(n)\mathcal{O}(n) 求出所有 f(i)f(i),于是我们就做完了。代码