有个问题。给定一个长度为 nnn 的二进制串。假设用 a1∼ana_1\sim a_na1∼an 表示。你可以选择一段区间 [i,j][i, j][i,j],然后翻转(即 i,ji,ji,j 交换位置、i+1,j−1i+1,j-1i+1,j−1 交换位置、以此类推)
目标是使得翻转后的二进制串构成的二进制数最小。
n≤5×105n\le5\times10^5n≤5×105,ai∈{0,1}a_i\in\{0,1\}ai∈{0,1},构成的二进制数定义为 a1a2⋯an‾\overline{a_1a_2\cdots a_n}a1a2⋯an
有没有线性做法?如没有,O(nlogn)\mathcal O(n\log n)O(nlogn) 亦可。