题解 SP90 MINIMAX - Minimizing maximizer
传送门SP90 MINIMAX - Minimizing maximizer
题意
对于有个长度为 $n$ 的序列,最大值在位置 1,有 $k$ 个“排序器”,第 $i$ 个可以将 $l_i\sim r_i$ 之间的数字排序。
求最少选择多少个排序器可以使得序列的最后一个数就是序列最大值(“排序器”的先后顺序不能改变)。
简要分析
很明显这道题的答案与序列无关(连序列都没有给)。
每次操作就相当于将 $l\sim r$ 之间的数字最大值转移至 $r$,
看最少多少次可以到 $n$ 处。
暴力
尽管暴力没有部分分,但是敲一下暴力有助于梳理代码思路及更方便优化(隐语:不知道暴力是不是对的)。
用 $f_i$ 表示数值最大值到达 $i$ 处的最小花费。
对于每次操作进行转移,
- 若使用这个“排序器”,$f_r = \min_{i=l}^{i\le r} +1 $。
- 否则,不变。
正解
正解其实已经非常明显了,我们需要维护区间查询最值+单点修改,这也就表示我们可以用线段树来解决。
维护一个线段树来优化上式的 DP 就好了。

浙公网安备 33010602011771号