P3514 [POI2011] LIZ-Lollipop 题解
方法一:
我们发现找到一个为 $x$ 的区间是困难的。
但 $\le x$ 是 $=x$ 的必要条件,于是考虑放缩。
找到一个 $\le x$ 的区间是平凡的,可以直接二分。
假设左端点为 $1$。
若二分出为 $x$,即答案。
若二分出为 $x-1$,如何构造出 $x$ 还是不容易,于是考虑何时无解。
然后考虑更新 $l$,不可能直接计算,考虑递推/构成。
由题得未选到的第一个数是 $2$,那么分类讨论。
如果第一个位置为 $1$,这时可以直接去 $1$ 添 $2$。
否则,我们发现这样的区间可以直接搬运,即 $l,r$ 同时加 $1$。
我们发现第二个过程其实可以优化,预处理随便跳即可。
这样就是 $O(m \log n)$ 的,可以通过。
预处理代替二分即可 $O(n)$。
方法二:
注意到 $\omega$ 很小,我们可以从此入手讨论。
- 考虑初始时全为一的情况。
这样子区间集合等价于从一开始的区间集合。很好做,直接判断大小。
考虑加一个 $2$,发现不是很好做。(有佬会做请教教我)
但是我们可以考虑另一种简单情形:(这步挺神仙的,不是很常见)
- 考虑初始时全为二的情况。
显然发现奇数无解,偶数判断大小。
- 考虑加入一个 $1$,分讨一下:
若不经过 $1$,则同原来一样。
若经过 $1$,我们发现奇偶性改变了,这样就可以产生与原来不交的一个集合的答案。且依然是从一开始的。
然而构造不太好整了,于是仍然考虑放缩,但只是考虑判断无解,即分析答案集合。
- 考虑加入两个 $1$,分讨一下:
同样的考虑奇偶性与分讨:
考虑奇数与前者无异,取 $\max$ 即可,而偶数就会新产生结果,单独分析答案集合。
我们希望它可以满足前者的一些性质,此题中为连续性。
手摸一下似乎是满足的(省略)。
容易证明(手摸几组后就很显然了):
我们发现,左端点在第一个 $1$ 左边,右端点在第二个 $1$ 右边的区间产生的数的集合,与左端点在第一个 $1$ 右边,右端点在第二个 $1$ 左边的区间产生的数的集合,刚好可以拼成一个从 $2$ 开始的连续区间。
所以这样偶数的区间还是从最小值到最大值。
- 由此我们可以猜想:
我们只需求出奇偶最大值即可判断无解。
这仍然不是很好求的,至少不能用之前的思路了。
我们考虑极限,若全选,必然为奇偶最大值中的一个。
考虑借此递推另一者,由于只有 $1$ 能改变奇偶,所以我们找到最靠前的与最靠后的,减去前/后缀即可。
最后考虑原问题,根据前面的推导,显然是分奇偶递推。
考虑从 $x$ 递推至 $x-2$ 是的情况:(注意这个递推其实也是一种 $\text{dp}$,所以要考虑后效性)
首先对于任何一个 $x$ 递推至 $x-2$ 是否有后效性呢?(即是否所有 $x-2$ 在构造同奇偶答案上等价)
考虑前面的结论,答案是连续的,所以对于任意一个 $x-2$ 均有方案。
然后考虑转移:
两边至少有一个 $2$,我们考虑删去任意一个即可。
两边至少没有 $2$,必然全为 $1$,我们考虑全部删去即可。
于是我们对整个序列的奇偶最大值的区间做一遍,我们就用预处理做完了这道题。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 使用C#创建一个MCP客户端
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现