permutation difference sum

2 secs 1024 MB
first_vil's icon first_vil

並べ替えた後の数列 BB において Bi=Ax,Bi+1=AyB_i=A_x,B_{i+1}=A_y となり、答えに AxAy|A_x-A_y| が寄与する回数を主客転倒の考え方を用いて求めていきます。

  • まず x,yx,y1x,yN1 \le x,y \le N を満たすように選んで固定します。
  • ii1iN11 \le i \le N-1 を満たすように自由に選べるので常に N1N-1 通りあります。
  • Ax,AyA_x,A_y 以外の要素はどのように並んでいてもよいので (N2)!(N-2)! 通りあります。

以上より (N1)!1x,yNAxAy\displaystyle (N-1)!\sum_{1 \le x,y \le N}|A_x-A_y| が答えになります。これを愚直に求めると O(N2)O(N^2) になるので間に合います。

なお、AA が昇順ソートされている場合は

1x,yNAxAy=2y=1Nx=1y(AyAx)=2y=1N(yAyx=1yAx)\displaystyle \sum_{1 \le x,y \le N}|A_x-A_y|=2\sum_{y =1}^{N}\sum_{x=1}^{y}(A_y-A_x)=2\sum_{y =1}^{N}(yA_y-\sum_{x=1}^{y}A_x)

となります。よって AA をソートし x=1yAx\displaystyle \sum_{x=1}^{y}A_x の部分を累積和で前計算してからこの式に従って求めると O(NlogN)O(N \log N) で解くことも可能です。