voidinsert(int n, int mask = 20){ if (mask == -1) eof = true; else { bool bit = n & (1 << mask); if (!next[bit]) next[bit] = newTrie(); next[bit]->insert(n, mask - 1); } }
intquery(int n, int mask = 20){ if (mask == -1) return0; bool bit = n & (1 << mask); if (next[!bit]) return (1 << mask) + next[!bit]->query(n, mask - 1); if (next[bit]) return next[bit]->query(n, mask - 1); return n & ((1 << (mask + 1)) - 1); } };
classSolution { public: intmax_xor(int arr[], int n){ Trie* t = newTrie(); t->insert(arr[0]); int res = 0; for(int i = 1; i < n; i++) { res = max(res, t->query(arr[i])); t->insert(arr[i]); } return res; } };