G - Minimum Xor Pair Query Editorial by kyopro_friends


注:公式解説の方がスマートです。

黒板に書かれた数のmultisetをbinary trieで管理します。各ノードは、

  • そのノード以下が何個の要素を持つか(以下、「サイズ」)
  • そのノード以下がもつ値のうちいずれか1つ

を持ちます。

答えの候補になるのは、左右の子のサイズがともに 1 のノードにおけるその 2 数の xor か、サイズ 2 以上の葉ノードが存在するときの 0 に限ります。そのような箇所は全体で O(N) 個です。また、trieに要素を1個追加/削除したとき、そのような箇所は高々1個増え、高々1個減ります。

よって、追加/削除のときに、答えの候補のmultisetを更新することで、全体で \(O(Q(\log Q+\log A))\) になります。

「左右の子のサイズがともに 1 のノード」「サイズ 2 以上の葉ノード」で見ているのはともに、ソートしたときに隣接する 2 数であることから、本質的には公式解説と同じです。

posted:
last update: