CF840E In a Trap

考虑对值域分块,设 f i , j f_{i,j} fi,j,表示从 i i i向上走 j j j块的答案,每块长度为 256 256 256,设 k k k为第j块中的第 k k k个点,则有 f i , j = max ⁡ a k ⊕ ( k + 256 i ) = max ⁡ a k ⊕ k ⊕ 256 i f_{i,j}=\max{a_k\oplus (k+256i)}=\max{a_k\oplus k\oplus 256i} fi,j=maxak(k+256i)=maxakk256i,前面两个数只与 k k k有关,然后就相当于要求一个数与一个集合的最大异或值是多少,用 t r i e trie trie树解决

你可能感兴趣的:(分块,算法)