显然,对于先手仅能选取[l,r]中最大的数,因此我们需要知道该区间的最大值,可以用ST表/线段树等数据结构进行预处理,同时我们处理出最大值所在的位置,额外用数组记录即可。
而对于后手,要求[L,R]最小且要赢,说明要找到两边区间内大于[l,r]中最大值且距离最近的位置。可以使用单调栈来预处理。
对于ai右边的最大值,我们维护一个单调递减栈,从左往右枚举,当栈头出栈时,当前数即为栈头右侧第一个比它大的数的位置,记录即可。
对于左侧同理。
给定一个长度为 n 的正整数序列 A1,A2,…,An。在这个序列上进行 q 轮独立的游戏,每轮游戏均按照以下规则进行:
双方均采取最优策略:先手会尽量让自己不败,后手会尽量让自己获胜或取得平局,并在能够达到目标结果的前提下尽可能缩短扩张后的区间长度。对于每一轮游戏,需要输出后手在该轮的结果(获胜、平局或失败),以及为了达到该结果所需的 最小最终区间长度。
By signing up a CodeFun2000 universal account, you can submit code and join discussions in all online judging services provided by us.