cogs1398 最长单调子序列 单调栈改进

本文介绍了如何使用单调栈解决cogs1398问题,通过维护一个单调栈,记录在扫描序列过程中不同位置的最长上升子序列长度。当遇到比栈顶元素大的值时,直接入栈;反之,则通过二分查找替换栈中适当位置的元素,以保持栈的单调性。最终栈顶元素的索引即为最长上升子序列的长度。
摘要由CSDN通过智能技术生成

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                  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值