420K 125MS GCC 596B 2009-01-11 00:56:04

技巧:设置一个数组a[i]

存放所有长度为i的上升子序列中最小的末元素值,比如说只有两个长度为3的上升子序列123和124,那么a[3]中存放的就是3(末元素3<4)

那么当来一个新数data时,如果它的值大于最长长度的末元素的值(即a[ans]),则ans++;且a[ans]=data;

否则,通过二分查找(数组a中的元素为递增),将最接近data且大于data的那个元素更新为data。

代码如下:

 

Code
posted on 2009-01-11 01:05  pandy  阅读(600)  评论(0编辑  收藏  举报