序列用
表示,处理到当前元素为止,长度为
的子序列的最小的结尾元素用
表示。序列
是单调增的,即
因为如果
,那么
对应的子序列中的第
个数是小于
的,这与
是最小的矛盾。
假设当前LIS长度为
,现在要计算以
结尾的LIS,只需二分长度
,看是否满足
。假设以
结尾的LIS长度为
,再进行一次更新:
B[m] = min(B[m], A[k]);
L = max(L, m);
即可。