atcoder#ABC262G. [ABC262G] LIS with Stack

[ABC262G] LIS with Stack

配点 : 600600

問題文

空の列 XX と空のスタック SS があります。また、項数が NN の整数列 A=(a1,,aN)A=(a_1,\ldots,a_N) が与えられます。 高橋君は i=1,,Ni=1,\ldots,N の順に、以下の 22 つの操作のうち一方を行います。

  • AA の先頭の整数 aia_iSS の先頭に移動させる。
  • AA の先頭の整数 aia_i を捨てる。

また、高橋君は SS が空でない任意のタイミングで次の操作をすることが出来ます。

  • SS の先頭の整数を XX の末尾に移動させる。

最終的な XX に対し、スコアを以下のように定めます。

  • XX が広義単調増加な場合、すなわち X=(x1,,xX)X=(x_1,\ldots,x_{|X|}) とした時に任意の整数 i(1i<X)i(1 \leq i \lt |X|) に対して xixi+1x_i \leq x_{i+1} が成り立つ場合、スコアは X|X| である。(X|X|XX の項数)
  • XX が広義単調増加でない場合、スコアは 00 である。

スコアの最大値を求めてください。

制約

  • 1N501 \leq N \leq 50
  • 1ai501 \leq a_i \leq 50
  • 入力はすべて整数

入力

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

NN

a1a_1 \ldots aNa_N

出力

答えを出力せよ。

7
1 2 3 4 1 2 3
5

以下のように操作をすると最終的な XX(1,1,2,3,4)(1,1,2,3,4) となり、スコアが 55 になります。

  • a1=1a_1=1SS の先頭に移動させる。
  • SS の先頭の 11XX の末尾に移動させる。
  • a2=2a_2=2SS の先頭に移動させる。
  • a3=3a_3=3 を捨てる。
  • a4=4a_4=4SS の先頭に移動させる。
  • a5=1a_5=1SS の先頭に移動させる。
  • SS の先頭の 11XX の末尾に移動させる。
  • a6=2a_6=2SS の先頭に移動させる。
  • SS の先頭の 22XX の末尾に移動させる。
  • a7=3a_7=3SS の先頭に移動させる。
  • SS の先頭の 33XX の末尾に移動させる。
  • SS の先頭の 44XX の末尾に移動させる。

また、スコアを 66 以上にすることは出来ません。よってスコアの最大値は 55 です。

10
1 1 1 1 1 1 1 1 1 1
10