解説

AiA_iを固定した時、AiAjA_i \oplus A_jを最大にするAjA_jを効率的に探索します。

AiA_iddビットを上から下へ見ていきます。

最適なAjA_jAiA_iとのxorを計算した時、ddビット目が1となるものです。

これはddビット目が1になる方が、その下のビットが全て1であっても結果として大きい値になるからです。

事前に数列をソートしておくと、各ビット位置に注目した場合にそのビットが0となる範囲と1となる範囲に分けることができます。

そして、適切な範囲を選択し各ビットごとに範囲を狭めていくことで解けます。

実装