题目要求一个序列中的两个子段,使这两个子段每段的异或和加起来值最大。
说到异或,我就想到开花 T r i e Trie Trie字典树。
先考虑怎么求一个 l l l到 r r r子段的异或和 ( ( (异或和:所有数异或起来的值 ) ) ):
a l ⊕ a l + 1 ⊕ . . . ⊕ a r − 1 ⊕ a r = ( a 1 ⊕ a 2 ⊕ . . . ⊕ a r − 1 ⊕ a r ) ⊕ ( a 1 ⊕ a 2 ⊕ . . . ⊕ a l − 2 ⊕ a l − 1 ) a_l\oplus a_{l+1}\oplus...\oplus a_{r-1} \oplus a_{r}=(a_1\oplus a_2\oplus...\oplus a_{r-1} \oplus a_{r})\oplus(a_1\oplus a_2\oplus...\oplus a_{l-2} \oplus a_{l-1}) al⊕al+1⊕...⊕ar−1