分析博弈论还是比较有意思的。
首先考虑,一个段区间内部边权都为正,左右两端边权为 \(0\),那么从一个位置一个方向走到 \(0\) 需要奇数步的话一定是先手必胜的,就直接往对应方向走并且把边清空即可,后手也必定只能往这个方向再走一步。如果两边都需要偶数步的话,先手必败,因为走不动/走一步就变成上一种状态。把 \(0\) 分割出来的段拿出来算就可以了。
如果最小值不为 \(0\),若有奇数个点:直接选一个方向走,把边清空,后手被迫只能走这个方向,最后会输。所以这种情况先手必胜。接下来只用考虑环长为偶数的情况。
假如最小值是 \(1\),如果某个时刻一个人把一条边变为 \(0\),那么对手就可以直接往一个方向,边走边清空即可,所以自己就输了。故任何人会避免将 \(1\) 变成 \(0\)。其实这个时候 \(1\) 的地位就跟最开始讨论的 \(0\) 的地位是一样的。我们有一个更加简单的结论:我们直接把最小值分割出来的段拿出来算就可以了。
考虑证明:只需证明任何一个人若把当前最小值减成更小就必败。因为此时我们可以就着当前最小值进行往单边走的策略,并把边权变成当前最小值。那么对手必定有一个时刻把最小值减成更小,这样就归纳到最小值更小的情况(直到 \(0\))了。
两种维护本质是相同的,用线段树维护就可以了,时间复杂度 \(\mathcal O(n+q\log n)\)。