atcoder#AGC028B. [AGC028B] Removing Blocks

[AGC028B] Removing Blocks

配点 : 600600

問題文

NN 個のブロックが一列に並んでおり、左から右へ順に 11 から NN の番号がついています。 それぞれのブロックには重さが定まっており、ブロック ii の重さは AiA_i です。 すぬけ君は、これらのブロックに対して次の操作を NN 回行います。

  • まだ取り除かれていないブロックを 11 つ選んで取り除く。 この操作のコストは、取り除くブロックと連結なブロック(取り除くブロック自身も含む)の重さの総和となる。 22 つのブロック xx, yy ( xyx \leq y ) が連結であるとは、すべての zz ( xzyx \leq z \leq y ) について、ブロック zz が取り除かれていないことを意味する。

ブロックを取り除く順番はちょうど N!N! 通りあります。 N!N! 通りのすべての順番について NN 回の操作のコストの合計を求め、その総和を求めてください。 ただし、答えは非常に大きくなることがあるので、109+710^9+7 で割った余りを求めてください。

制約

  • 1N1051 \leq N \leq 10^5
  • 1Ai1091 \leq A_i \leq 10^9
  • 入力はすべて整数である。

入力

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

NN

A1A_1 A2A_2 ...... ANA_N

出力

N!N! 通りのすべての順番について NN 回の操作のコストの合計を求め、その総和を 109+710^9+7 で割った余りを出力せよ。

2
1 2
9

ブロック 11, 22 の順で取り除く場合を考えます。 まず、最初の操作では、ブロック 1122 が連結なので、操作のコストは 1+2=31+2=3 です。 次の操作では、ブロック 22 しか残っていないので、操作のコストは 22 です。 よって、この順で取り除く場合のコストの合計は 3+2=53+2=5 です。

ブロック 22, 11 の順で取り除く場合を考えます。 まず、最初の操作では、ブロック 1122 が連結なので、操作のコストは 1+2=31+2=3 です。 次の操作では、ブロック 11 しか残っていないので、操作のコストは 11 です。 よって、この順で取り除く場合のコストの合計は 3+1=43+1=4 です。

上記より、答えは 5+4=95+4=9 となります。

4
1 1 1 1
212
10
1 2 4 8 16 32 64 128 256 512
880971923