比赛中遇到了这么一道题,花十多分钟巧妙解决了动规但疯狂超时错失金奖,赛后百度一下原来LIS还有树状数组的Onlogn算法 orz。
先学习下LIS最长上升子序列
看了大佬的文章OTZ:最长上升子序列 (LIS) 详解+例题模板 (全),其中包含普通O(n)算法和以LIS长度及末尾元素成立数组的普通O(nlogn)算法,当然还有本文涉及的树状数组维护后的O(nlogn)算法。
再贴一个容易理解的树状数组算法:https://www.cnblogs.com/war1111/p/7682228.html
再看看这道题
原题链接:http://acm.hnucm.edu.cn/JudgeOnline/problem.php?id=1373
题目描述
给定一个序列 a,求去除 a 中一段连续长度为 L 的序列后,a 的最长不下降子序列的长度的最大值。
输入