题目
题意概要
对于任意序列,令
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}] [xj−1,xj] 和 [ x k − 1 , x k ] [x_{k-1},x_{k}] [xk−1,xk] 要么包含,要么不相交。也就是说, x j − 1 < x k − 1 < x j < x k x_{j-1}<x_{k-1}<x_j<x_k xj−1<xk−1<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 虐了,烦,不想写代码。