問題一覧 > 通常問題

No.992 最長増加部分列の数え上げ

レベル : / 実行時間制限 : 1ケース 2.000秒 / メモリ制限 : 512 MB / 標準ジャッジ問題
タグ : / 解いたユーザー数 80
作問者 : %20 / テスター : kotatsugame
9 ProblemId : 3784 / 出題時の順位表 / 自分の提出
問題文最終更新日: 2020-03-08 16:57:30

問題文

N 要素からなる整数列 A=(A1,A2,,AN) が与えられます。
A の最長増加部分列の取り出し方の総数を求めてください。
取り出した部分列が列として等しい場合でも、選んだ位置の集合が異なれば別の取り出し方として数えます。

すなわち、1I1<I2<<IMN かつ AI1<AI2<<AIM となるような整数列 I のうち、要素数 M が最大になるようなものが何通りあるかを求めてください。

ただし、答えを 109+7 で割った余りを出力してください。

入力

N
A1 A2  AN

入力は以下の制約を満たします。

  • N,Ai は整数である
  • 1N2×105
  • 109Ai109

出力

A の最長増加部分列の取り出し方の総数を 109+7 で割った余りを出力してください。

サンプル

サンプル1
入力
5
1 4 2 5 3
出力
3

最長増加部分列の取り出し方は、次の 3 通りです。

  • (A1,A2,A4)=(1,4,5)
  • (A1,A3,A4)=(1,2,5)
  • (A1,A3,A5)=(1,2,3)
サンプル2
入力
3
1 1 2
出力
2

最長増加部分列の取り出し方は、次の 2 通りです。これらは別のものとして数えることに注意してください。

  • (A1,A3)=(1,2)
  • (A2,A3)=(1,2)
サンプル3
入力
12
1 1 2 2 3 1 2 4 3 3 4 4
出力
40

(1,2,3,4) という部分列がいっぱいあります。

提出するには、Twitter 、GitHub、 Googleもしくは右上の雲マークをクリックしてアカウントを作成してください。