atcoder#AGC023E. [AGC023E] Inversions

[AGC023E] Inversions

配点 : 17001700

問題文

すぬけ君は、長さ NN の整数列 AA を持っています。 すぬけ君は、(1,2,...,N)(1, 2, ..., N) の順列 PP であって、次の条件を満たすものが好きです。

  • 全ての ii ( 1iN1 \leq i \leq N ) について、PiAiP_i \leq A_i

すぬけ君は、条件を満たすような順列の転倒数 ( ※ ) に興味を持ちました。 すぬけ君のために、条件を満たすような全ての順列について転倒数を求め、その総和を求めてください。 ただし、答えは非常に大きくなることがあるので、109+710^9 + 7 で割った余りを求めてください。

注釈

ある長さ NN の数列 ZZ の転倒数とは、整数 i,ji, j ( 1i<jN1 \leq i < j \leq N ) の組であって、Zi>ZjZ_i > Z_j を満たすものの個数を意味します。

制約

  • 1N2×1051 \leq N \leq 2 \times 10^5
  • 1AiN1 \leq A_i \leq N ( 1iN1 \leq i \leq N )
  • 入力はすべて整数である。

入力

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

NN

A1A_1 A2A_2 ...... ANA_N

出力

条件を満たすすべての順列の転倒数の総和を 109+710^9 + 7 で割った余りを出力せよ。

3
2 3 3
4

条件を満たす順列は (1,2,3)(1,2,3), (1,3,2)(1,3,2), (2,1,3)(2,1,3), (2,3,1)(2,3,1)44 つです。 それぞれの転倒数は 00, 11, 11, 22 なので、その総和である 44 を出力します。

6
4 2 5 1 6 3
7

条件を満たす順列は (4,2,5,1,6,3)(4,2,5,1,6,3) のみです。 この順列の転倒数は 77 なので、77 を出力します。

5
4 4 4 4 4
0

条件を満たす順列は 11 つもありません。

30
22 30 15 20 10 29 11 29 28 11 26 10 18 28 22 5 29 16 24 24 27 10 21 30 29 19 28 27 18 23
848414012