对于这道题,时间复杂度瓶颈在于求出初始局面需要的最小操作数。
可以从后向前扫,每遇见一个 1 就操作一次,时间复杂度可以做到 O(nn) 或 O(nlogn)。
但其实可以更快。
考虑初始局面中为 1 的位置,这些位置需要被按奇数次开关;同理初始为 0 的位置需要被按偶数次开关。
又因为操作一个位置 p 相当于把 p 的约数位置的开关全部按一次,那么设最终会在 i 处操作 bi 次,设原序列为 a ,那么有关系式:
ad=(d∣n∑bn)mod2
现在已知 ai ,可以通过 Dirichlet 后缀和的逆过程求解 bi。
由于在 mod 2 意义下进行,所以解出来 bi=0/1,也就是每个位置至多被操作一次。
时间复杂度 O(nloglogn),接近线性。
但是由于我的常数比较大,所以跑不过一部分 O(nlogn) 做法。