我看到大家好像都是用动态规划, 没有用位操作的. s 只可能翻转成两种序列:101010010101 并且注意到, s 与这两种序列做异或, 得到 1 的个数就是转为对应序列的操作数, 两个中取最小值则是权值. 即:10001 ^ 10101 = 0010010001 ^ 01010 = 11011使用 BitSet将 s 与这两种序列做异或, 对应区间 1 的个数就为对应区间的权值. 也可以使用前缀和, 这样查询就是 `O(1)` public static void main(String[] args) { Scanner in = new Scanner(System....