cogs原题:点击打开链接
单调栈改进:
~从前往后扫描序列维护单调栈h
~h【i】表示当前扫描到的位置中,存在长度为i的最长上升子序列,序列中最后一个数(即最大值)的值。
~当扫描到某一数据时有两种情况:①大于最大值:则直接放入h的堆顶。②小于最大值:在已有的h中通过二分找到相邻两值并用其替换刚好比插入值大的数。
(更新某个点并不是意味着更改当前最长子序列的值,而是意味着未来有某一值比这个值大的时候可以插入可以形成新的较长的子序列)
当前位置 h:1 2 3 4 5 6 7 top
1 1 1
2 1 3 2
3 1 3 6 3
4