加载中...

4.8——908D

908D

限时每日一题day28。不想发生的事终究还是发生了,以后可能也很难再坚持下去了,看心情随缘分吧。。。

可以发现,将 \(b\) 数组中的所有数倒序排放并插入 \(a\) 中,\(LIS\) 长度最多增加 \(1\)。考虑如何插入可以使得 \(LIS\) 不增加:

要想让 \(b\) 中的每个数在插入时,都不作为 \(a\) 的原始序列中的任何 \(LIS\) 的一部分,则可以这样做:将插入的数 \(x\) 放在第一个满足 \(a_{i}<x\)\(a_{i}\) 之前,这样可以做到插入的 \(x\) 不会让序列的 \(LIS\) 增加。证明如下:

由于 \(x\) 前面的数都比它大,因此 \(x\) 只能作为某个 \(LIS\) 的开头。又因为当 \(x\) 作为某个 \(LIS\) 的开头时,在它右侧比 \(x\) 小的 \(a[i]\) 必然可以替换 \(x\),成为新的 \(LIS\) 开头。这样也就相当于所有含有 \(x\)\(LIS\) 必然可以用 \(a\) 中的原 \(LIS\) 替换。因此插入 \(x\) 一定不会让序列的 \(LIS\) 增加。

\(b\) 中所有数按这种插入方式倒序插入即可,且可以做到双指针线性插入。

code

posted @ 2025-04-08 21:37  jxs123  阅读(9)  评论(0)    收藏  举报