给定两个区间,先手在 AAA 序列给定区间内选择一个数,后手在 BBB 序列给定区间内选另一个数。两人所选数字乘积为得分。先手希望得分尽量大,后手希望得分尽量小。
因为不存在相乘正负性改变的问题。由双方策略可知,先手必然选择区间内最大值,后手必然选择区间内最小值。因此使用线段树/ST表维护区间内最大值和最小值即可。
若先手操作区间长度为 1,则有如下几种情况:
1. 先手必须选的数是 0,此时答案是 0。
2. 先手必须选的数是正数,此时后手策略为选择其区间内的最小数。
3. 先手必须选的数是负数,此时后手策略为选择其区间内的最大数。
后手同理:
1. 后手必须选的数是 000,此时答案是 000。
2. 后手必须选的数是正数,此时先手策略为选择其区间内的最大数。
3. 后手必须选的数是负数,此时后手策略为选择其区间内的最小数。
此时双方的操作区间内都有多个数,其中双方的最优策略会使相乘的正负号改变。因此,我们应该按照双方操作区间内的正负数存在情况进行讨论。
我的做法将所有情况分为八类。以下的“最小”“最大”均指数本身的值而不是绝对值。
假设 n,mn,mn,m 同级,使用线段树的时间复杂度为O(n+qlogn)O(n+qlogn)O(n+qlogn),ST表的时间复杂度为 O(nlogn+q)O(nlogn+q)O(nlogn+q),均可通过本题。