AtomAlpaca
当成北京集训讲这道题的时候也有人问了答案上界的问题,当时一时间没能答上来,趁着同学讲题的时间想出了证明,于是返场讲了一下,掌声雷动。两年后的今天因为这篇帖子再次尝试寻找答案的上界,曾经能被我十分钟想出来的证明现在花了我将近一个小时,令人感叹。想念那年北京的第一场雪。
题面及其解法请移步这篇博客。
设一共有 次操作
我们把操作分为两个 stage,第二个 stage 满足:
不难看出这个 stage 一定存在。我们把剩下的操作全划分进 stage
首先几个 observision:
Observision 任何时间,如果区间长度为 ,则一定无解
Proof: 显然。
Observision 任何时间,如果一个区间是之前到过某个区间的子区间,则无解。形式化地说, 时一定无解。
Proof. 产生循环。
得到推论,stage 2 从长度为 的区间开始,最多经过 次操作得到 。
Observision ,如果 ,则有 ,也即一个区间开始向两侧“扩张”,就会一直扩张下去。
Proof. 扩张之后最小值不增最大值不减。
也就是说一旦产生了一次“扩张”就会直接进入 stage2
接下来再考虑 stage 1。这时我们得到了一个问题:给出一个长度为 的线段,让你往上面不断放区间,要求不能是之前放过区间的子集,也不能是之前放过区间的超集,问最多能放下多少个(我们不考虑能不能构造出对应的 数组,因为我不会。)。
显然最优解是一直放长度为 的区间,一共能放 次,然后一定会产生“扩张”进入 stage 2。我们放的第一个区间是题目给出的,放的最后一个区间就是 stage2 的第一个区间,因此最大操作次数为 次。
当 就能卡到上界,因此该结果无法继续改进。