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:
