AiA_iAiを固定した時、Ai⊕AjA_i \oplus A_jAi⊕Ajを最大にするAjA_jAjを効率的に探索します。
AiA_iAiのdddビットを上から下へ見ていきます。
最適なAjA_jAjはAiA_iAiとのxorを計算した時、dddビット目が1となるものです。
これはdddビット目が1になる方が、その下のビットが全て1であっても結果として大きい値になるからです。
事前に数列をソートしておくと、各ビット位置に注目した場合にそのビットが0となる範囲と1となる範囲に分けることができます。
そして、適切な範囲を選択し各ビットごとに範囲を狭めていくことで解けます。