atcoder#AGC030D. [AGC030D] Inversion Sum

[AGC030D] Inversion Sum

配点 : 10001000

問題文

長さ NN の整数列 A1,A2,...,ANA_1,A_2,...,A_N が与えられます。QQ 回の操作を順に行います。 ii 回目の操作は 22 つの整数 Xi,YiX_i,Y_i を用いて表され、以下の 22 つの操作からちょうど片方を選んで行います。

  • AXiA_{X_i}AYiA_{Y_i} の値を入れ替える
  • 何もしない

操作の行い方は 2Q2^Q 通りあります。これらすべての操作の行い方に対する最終的な数列の反転数をすべて足し合わせたものを 109+710^9+7 で割ったあまりを求めてください。

ただし、数列 P1,P2,...,PMP_1,P_2,...,P_M の反転数とは、1i<jM1\leq i < j\leq M かつ Pi>PjP_i > P_j を満たすような整数の組 (i,j)(i,j) の個数です。

制約

  • 1N30001 \leq N \leq 3000
  • 0Q30000 \leq Q \leq 3000
  • 0Ai109(1iN)0 \leq A_i \leq 10^9(1\leq i\leq N)
  • 1Xi,YiN(1iQ)1 \leq X_i,Y_i \leq N(1\leq i\leq Q)
  • XiYi(1iQ)X_i\neq Y_i(1\leq i\leq Q)
  • 入力はすべて整数である

入力

入力は以下の形式で標準入力から与えられる。

NN QQ

A1A_1

::

ANA_N

X1X_1 Y1Y_1

::

XQX_Q YQY_Q

出力

最終的な数列の反転数の総和を 109+710^9+7 で割ったあまりを出力せよ。

3 2
1
2
3
1 2
1 3
6

操作の行い方としてありうるものは次の 44 通りです。

  • 11 回目も 22 回目は何もしない。最終的な数列は 1,2,31,2,3 であり、反転数は 00 である。
  • 11 回目は何もせず、22 回目は入れ替えを行う。最終的な数列は 3,2,13,2,1 であり、反転数は 33 である。
  • 11 回目は入れ替えを行い、22 回目は何もしない。最終的な数列は 2,1,32,1,3 であり、反転数は 11 である。
  • 11 回目も 22 回目も入れ替えを行う。最終的な数列は 3,1,23,1,2 であり、反転数は 22 である。

これらの反転数の総和である、0+3+1+2=60+3+1+2=6 を出力します。

5 3
3
2
3
1
4
1 5
2 3
4 2
36
9 5
3
1
4
1
5
9
2
6
5
3 5
8 9
7 9
3 2
3 8
425