枚举 x,由于 S i ≤ 2 ∗ 1 0 5 S_i\le 2*10^5 Si≤2∗105,所以 x x x 为 O ( l o g V ) O(logV) O(logV) 级别。
将所有 S i ≤ 2 x S_i \le 2^x Si≤2x 的数加入线性基中,我们有结论, x x x 成立当且仅当,所有 i ⊆ [ 0 , 2 x ) i \subseteq [0,2^x) i⊆[0,2x) 都可以被线性基表示出。
先证必要性,发现如果有一个合法排列,那么我们一定可以使它的第一项变为 0 0 0,于是显而易见整个排列都可以被线性基表示。
再证明充分性,如果线性基满足了条件,那么线性基里肯定恰有 x x x 个数,且刚好组成了 [ 0 , 2 x ) [0,2^x) [0,2x),将每个数都用一个 x x x 位二进制表示,意为它等于线性基中这些数的异或和,于是使用格雷码即可。

8789

被折叠的 条评论
为什么被折叠?



