atcoder#ABC262G. [ABC262G] LIS with Stack

[ABC262G] LIS with Stack

题目描述

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

  • A A の先頭の整数 ai a_i S S の先頭に移動させる。
  • A A の先頭の整数 ai a_i を捨てる。

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

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

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

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

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

输入格式

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

N N a1 a_1 \ldots aN a_N

输出格式

答えを出力せよ。

题目大意

题目大意

给定空序列 XX 、空栈 SS 和一个长度为 NN 的序列 A=(a1,a2,,aN)A=(a_1,a_2,\cdots,a_N)

对于 i=1,2,,Ni=1,2,\cdots,N ,有两种操作可以选择:

  • 在栈 SS 中插入 aia_i
  • aia_iAA 中删除。

(以上两种二选一)

  • SS 不为空时,把 SS 的栈顶移动到 XX 的尾处。(无论进行此操作与否)

求出序列 XX 的最大得分:

  • XX 是不降序列,得分为 XX 的长度
  • 否则得分为 00

输入格式

第一行输入正整数 NN

第二行输入 NN 个正整数表示 aia_i

N50N\leq 50

i[1,n],1ai50\forall i \in [1,n],1\leq a_i\leq 50

输出格式

输出最大得分。

7
1 2 3 4 1 2 3
5
10
1 1 1 1 1 1 1 1 1 1
10

提示

制約

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

Sample Explanation 1

以下のように操作をすると最終的な X X (1,1,2,3,4) (1,1,2,3,4) となり、スコアが 5 5 になります。 - a1=1 a_1=1 S S の先頭に移動させる。 - S S の先頭の 1 1 X X の末尾に移動させる。 - a2=2 a_2=2 S S の先頭に移動させる。 - a3=3 a_3=3 を捨てる。 - a4=4 a_4=4 S S の先頭に移動させる。 - a5=1 a_5=1 S S の先頭に移動させる。 - S S の先頭の 1 1 X X の末尾に移動させる。 - a6=2 a_6=2 S S の先頭に移動させる。 - S S の先頭の 2 2 X X の末尾に移動させる。 - a7=3 a_7=3 S S の先頭に移動させる。 - S S の先頭の 3 3 X X の末尾に移動させる。 - S S の先頭の 4 4 X X の末尾に移動させる。 また、スコアを 6 6 以上にすることは出来ません。よってスコアの最大値は 5 5 です。