宇宙飞船

题目

传送门 to usOJ

题意概要
对于任意序列,令 x 0 = 0 x_0=0 x0=0

对于一个无相同元素的序列,称其为 “好的” ,当且仅当如下条件成立:对于任意不大于 n n n 的自然数 j , k j,k j,k ,区间 [ x j − 1 , x j ] [x_{j-1},x_{j}] [xj1,xj] [ x k − 1 , x k ] [x_{k-1},x_{k}] [xk1,xk] 要么包含,要么不相交。也就是说, x j − 1 < x k − 1 < x j < x k x_{j-1}<x_{k-1}<x_j<x_k xj1<xk1<xj<xk 是不可以原谅的!

现在有一个长度为 n n n 的排列 ⟨ x 1 , x 2 , x 3 , … , x n ⟩ \langle x_1,x_2,x_3,\dots,x_n\rangle x1,x2,x3,,xn 。现在你可以改变一些 x x x 的值,使它变成 “好的” 。当然,这里的 x 0 = 0 x_0=0 x0=0 是规定的,不可以改。

注意, x x x 可以修改为任意实数。输出最小的更改数量。

思路

几乎就是正解了,只差了一点点 😢

首先注意到:如果 ⟨ x ⟩ \langle x\rangle x 是 “好的” ,当且仅当每个元素 要么是后缀最小值,要么是后缀最大值

那么你就猜到了,更改 x x x 的最佳方式就是使其无限接近于上一个 x x x等价于从序列中删去

什么样的子序列满足上面的条件呢?其实真理的大海就在面前。就是 以某个点作为结尾的 L I S \tt LIS LIS L D S \tt LDS LDS 拼接在一起

然后就做完了。复杂度 O ( n log ⁡ n ) \mathcal O(n\log n) O(nlogn) ,又好写。

代码

今天又被 s y \tt sy sy 虐了,烦,不想写代码。

©️2020 CSDN 皮肤主题: 技术工厂 设计师:CSDN官方博客 返回首页