1. 程式人生 > >【轉載】線性基的更多操作!

【轉載】線性基的更多操作!

一位 如果 xor 不可 異或 包含 最大 處理 最大值

查詢某個數

轉自帥到報警
就是查找某個數是否可以由這 n 個數中任一個數異或得到。首先還是剛才那個定理:線性基的值域與原數組的值域相同。
還有我們要發現一個性質:如果 x1 ^ x1 = x3, 那麽 x3 ^ x2 = x1,且 x3 ^ x1 = x2(可以自己證明一下)。
我們也是從低到高掃這個數的每一位,如果這第 i 位為 1,就異或上 Pi,然後知道處理到最後一位。如果變成 0 了,那麽就是可以的。

查詢最值

轉自Marser

最大值可以用貪心的思想來做。
從高到低遍歷數組,如果ans^第i位的那個數後大於ans,則^這個數,因為這樣可以保證ans第i位為1,且後面不可能有機會改變第i位。

很顯然,數組中最小的非零數就是最小值。

查詢第k大值

轉自Marser

首先將數組中的所有數變成包含這個最高位且可以通過Xor得到的最小值。
具體實現方法就是每一位向後掃,若Xor後變小,則Xor。
之後就可以發現第k大只要將k改為二進制後,將二進制所對應的位置的數Xor起來即可。

【轉載】線性基的更多操作!