atcoder#JSC2019QUALB. Kleene Inversion

Kleene Inversion

题目描述

長さ N N の整数列 A = A0, A1, ..., AN  1 A~=~A_0,~A_1,~...,~A_{N\ -\ 1} があります。

A A K K 回繰り返した長さ K × N K\ \times\ N の整数列を B B とします。たとえば A = 1, 3, 2 A~=~1,~3,~2 K = 2 K~=~2 のとき、 B = 1, 3, 2, 1, 3, 2 B~=~1,~3,~2,~1,~3,~2 です。

B B の転倒数を 109 + 7 10^9\ +\ 7 で割った余りを求めてください。

ここで B B の転倒数は、整数の順序対 $ (i,~j)~(0\ \leq\ i\ <\ j\ \leq\ K\ \times\ N\ -\ 1) $ であって Bi > Bj B_i\ >\ B_j を満たすものの個数として定義されます。

输入格式

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

N N K K A0 A_0 A1 A_1 ... ... AN  1 A_{N\ -\ 1}

输出格式

B B の転倒数を 109 + 7 10^9\ +\ 7 で割った余りを出力せよ。

题目大意

给你一个长度为 NN 的数组 AA,其中元素为 A0An1A_0 \sim A_{n-1}

使长度为 N×KN\times K 数组 BB,为 KKAA 首尾相连而成。

BB 中逆序对的数目 mod  109+7\bmod\;10^9+7

另外,样例 22 并非没有输出,输出应为 00

2 2
2 1
3
3 5
1 1 1
0
10 998244353
10 9 8 7 5 6 3 4 2 1
185297239

提示

制約

  • 入力は全て整数である。
  • 1  N  2000 1\ \leq\ N\ \leq\ 2000
  • 1  K  109 1\ \leq\ K\ \leq\ 10^9
  • 1  Ai  2000 1\ \leq\ A_i\ \leq\ 2000

Sample Explanation 1

このケースでは B = 2, 1, 2, 1 B~=~2,~1,~2,~1 です。 - B0 > B1 B_0\ >\ B_1 - B0 > B3 B_0\ >\ B_3 - B2 > B3 B_2\ >\ B_3 であり、B B の転倒数は 3 3 です。

Sample Explanation 2

A A は同じ数を複数含むこともあります。

Sample Explanation 3

109 + 7 10^9\ +\ 7 で割った余りを出力することに注意してください。