由 [联合省选 2023] 填数游戏 的思考

首先,省选这道题可以转化为这个问题:

给定序列 \(a\) 与若干个不交区间(可能有包含),每个区间可以选择区间内或区间外 \(+1\),最大化最小值。

显然要一开始钦定所有区间选区间内,然后要选一些区间反转。这个可以随便贪心,当然也可以转成树上边的定向问题(原题不就是树吗...)进行树形 DP。

进一步扩展,如果区间是任意的怎么办?

如果 \(a\) 序列一开始全 \(0\),把原问题转化成最小化最大值,这其实就是 「JOISC 2017 Day 2」门票安排

设最终序列为 \(b\)。有一个重要性质依然可以使用:

反转的区间必然有交。
证明:两个不交区间同时反转不如不反转。

考虑二分+枚举区间交位置+枚举区间交位置取值,可以确定总共反转多少个区间,进而确定每个位置至少有多少个覆盖它的区间要反转,使用扫描线+堆贪心可以做到 \(O(\mathrm{poly(log(n))})\)

发现复杂度瓶颈在于决策数太多,需要继续挖掘性质。设区间交为 \([l,r]\),其内 \(b\) 的最大值的位置 \(p\),感性理解其他位置的不会超过 \(b_p\) 太多,其实:

存在最优序列,使得所有反转的区间必然交于 \(b_p \ge \max\{b\}-1\)
证明:如果 \(b_p \le \max\{b\}-2\),同时反转一个以 \(l\) 为左端点与一个以 \(r\) 为右端点不会更劣。

于是不用枚举取值了,那能不能不枚举位置?可以!

存在最优序列,使得所有反转的区间必然交于 \(a_p = \max\{a\}\)
证明:如果还有比 \(a_p\) 更大的数且在 \([l,r]\) 外,设其为 \(x\),由于 \(b_x\) 最多比 \(b_p\)\(1\),而 \(a_x\) 至少比 \(a_p\)\(1\),则覆盖 \(x\) 的区间反转个数一定 \(\ge\) 位置 \(p\),矛盾。

同时还可以证明 \(a\) 中任意一个最大值都可行。于是不用枚举位置了,复杂度为 \(O(n\log n\log V)\)

最后可以发现 \(a\) 序列有没有初值其实无所谓,就解决了任意区间的问题。

启示:

  1. 贪心问题要善于发掘性质(可以从最值入手)
  2. 二分将最优化问题转化为判定性问题(时常与贪心结合)
  3. 不断排除无效决策,优化复杂度
posted @ 2023-04-07 20:27  Zesty_Fox  阅读(28)  评论(0编辑  收藏  举报