把博客园图标替换成自己的图标
把博客园图标替换成自己的图标end

题解 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 就好了。

警钟:要判断输入的 $l$ 和 $r$ 的大小关系。

posted @ 2023-02-10 14:31  djh0314  阅读(15)  评论(0)    收藏  举报  来源
浏览器标题切换
浏览器标题切换end