题意简述
给定一个长度为 $m$ 的数组 $b=[b_1,b_2,\ldots,b_m]$,其中 $b_i \geq 2$。定义一个双人博弈:
- 两人轮流操作,Poby 先手。
- Poby 操作:选择某个 $b_i \ge 2$,将其替换为 $\left\lfloor \dfrac{b_i}{2} \right\rfloor$。
- Rekkles 操作:选择某个 $b_i \ge 2$,将其替换为 $b_i+1$。
- 当所有元素都变为 $1$ 时游戏结束。
得分 = Poby 操作次数。Poby 目标是最小化得分,Rekkles 目标是最大化得分。
定义数组 $b$ 的值为双方最优操作时的得分。
现在给定一个数组 $a$($a_i \ge 2$),有 $q$ 次区间查询 $(l,r)$,需要求出区间 $[a_l,\ldots,a_r]$ 的值。
思路分析
关键问题:Rekkles 在哪些数上操作才是有效的?
- $2$ 的幂
- 如果 $a_i=2^k$,它的二进制展开全是 $1000\ldots0$,Rekkels 的操作会完全被 Poby 抹除。
- Rekkles 在这里完全无从下手,不能制造额外负担。
- 形如 $2^k+1$ 的数
- 首先,如果某个数的二进制末位是 $1$,Rekkles 将它加一会产生进位,使得 Poby 最终必须额外多一步来抹掉这一位。
- 形如 $2^k+1$ 的数更加重要一些,因为 Rekkles 一旦错过它,就再也没机会使 Poby 操作次数增加了。
- 因此,只要这种数存在,Rekkles 就要尽可能多地抢到它。
- 同样,Poby 不会一直跟随 Rekkles 在同一个数上操作,否则必然吃亏,所以他会尽早将这些数消掉。于是这类数里,最多只有一半能被 Rekkles利用。
- 普通数(既不是 $2^k$ 也不是 $2^k+1$)
- 如果 Rekkles 对它加一,Poby 下一步直接就能把 Rekkles 的增量抹掉,相当于无效操作。
- 因此 Rekkles 应该等待 Poby 消除出来一个末位为 $1$ 的数字。
- 所以这类数一定可以被 Rekkles 操作出来一个最高位进位,从而使 Poby 多一次操作。
最终结论
设区间 $[a_l,\ldots,a_r]$ 内:
- $A =$ 形如 $2^k$ 的数的个数;
- $B =$ 形如 $2^k+1$ 的数的个数;
- $C =$ 其他数的个数。
那么答案为:
即:基础操作次数 + 来自 $2^k+1$ 的额外贡献 + 来自“普通数”的额外贡献。