2
class QueryComparator implements Comparator<int[]> {3
public int compare(int[] a, int[] b) {4
return Integer.compare(a[1], b[1]);18
public int[] maximizeXor(int[] nums, int[][] queries) {21
int len = queries.length;22
int[][] queryWithIndex = new int[len][3];23
for (int i = 0; i < len; i++) {24
queryWithIndex[i][0] = queries[i][0];25
queryWithIndex[i][1] = queries[i][1];26
queryWithIndex[i][2] = i;28
Arrays.sort(queryWithIndex, new QueryComparator());31
int[] ans = new int[len];33
Node root = new Node();34
for (int i = 0; i < len; i++) {35
while (numId < nums.length && nums[numId] <= queryWithIndex[i][1]) {36
addNumToTree(nums[numId], root);40
ans[queryWithIndex[i][2]] = maxXOR(queryWithIndex[i][0], root);46
private void addNumToTree(int num, Node node) {47
for (int i = 31; i >= 0; i--) {48
int digit = (num >> i) & 1;50
if (node.one == null) {51
node.one = new Node();55
if (node.zero == null) {56
node.zero = new Node();63
private int maxXOR(int num, Node node) {64
if (node.one == null && node.zero == null) {69
for (int i = 31; i >= 0 && node != null; i--) {70
int digit = (num >> i) & 1;72
if (node.zero != null) {79
if (node.one != null) {