最长平稳上升子序列
https://codeforces.com/contest/1367/problem/F2
对于一个序列定义这样一种操作:取出任意一个数,放在数列最前面或者最后面。求最少操作多少次可以让序列变得有序。数字有可能重复,2e5。
简单思考后我们发现,其实就是需要我们找到最长的、平稳上升(相邻数字增加1或相同)的子序列,这样的序列可以不用动,只需要把应该位于它两侧的数字取出并放在它两侧即可,所以最少操作次数=n-maxlen。
最长平稳上升子序列(以下简称子序列)的构成遵循这样的特征:位于中间段的数字必须包括数列中全部的该数字,而位于两侧的数字则可以只是一部分,例如24324,234满足要求。这样一来dp就分为两部分,我们先求出整块的数字能构成的最长子序列,然后对于两侧加上所有能加的首尾元素,这个直接对元素的位置用lower_bound即可。
1 |
|