Loading [MathJax]/jax/output/HTML-CSS/jax.js
编程题
                ### 问题描述

最长上升子序列(Longest Increasing Subsequence),简称 LIS,指的是一个序列中最长的一个子序列,满足其单调递增。

例如,对于一个序列 a1,a2,a3,a4,...,ai,...,an,存在一个序列 b1,b2,...,bm,满足:

  1. 1b1<b2<...<bmn
  2. ab1<ab2<...<abm

那么我们称 {ab1,ab2,...,abm}{ai} 的一个上升子序列。

最长的上升子序列就是最长(元素数量最多)的一个上升子序列。

小蓝学到了这个知识点,并且学会一些用来计算 LIS 的常见算法。

于是小蓝向邻居小桥炫耀他学到的新知识,但是小桥显然不会让小蓝如此得意,于是他提出了一个新的问题:

给定一个长度为 n 的序列 {ai},小蓝可以选择其中的一个位置,修改为 010100 中的任何一个整数。具体来说,小蓝可以选择一个位置 p(p[1,n]),将 ap 重新赋值为 010100 中的任意一个整数。请问修改过后,最长上升子序列的长度是多少?

小蓝看到这个问题,两眼一抹黑,于是请你帮他解决这个问题。

输入格式

第一行输入一个整数 n

第二行输入 n 个整数 a1,a2,...,ai,...,an,用来表示序列 a 的每个值。

输出格式

输出一个整数,表示修改后的最长上升子序列长度。

样例输入

5
2 5 4 3 7

样例输出

4

说明

修改 35,得到 2,5,4,5,7,得到最长上升子序列为 2,4,5,7

评测数据范围

1n5×103,0ai109

查看答案
赣ICP备20007335号-2