2
public int countPairs(int[] nums, int low, int high) {3
Trie trie = new Trie();5
for (int i = nums.length - 1; i >= 0; i--) {6
// count all the element whose xor is less the low7
int cnt1 = trie.maxXor(nums[i], low);8
// count all the element whose xor is less the high+19
int cnt2 = trie.maxXor(nums[i], high + 1);24
public void add(int x) {26
for (int i = 31; i >= 0; i--) {27
int bit = (x >> i) & 1;28
if (!cur.contains(bit)) {36
public int maxXor(int x, int limit) {39
for (int i = 31; i >= 0 && cur != null; i--) {40
int bit = (x >> i) & (1);41
int req = (limit >> i) & 1;43
if (cur.contains(bit)) {44
low_cnt += cur.get(bit).cnt;46
cur = cur.get(1 - bit);64
public void put(int bit) {65
links[bit] = new Node();68
public Node get(int bit) {72
public boolean contains(int bit) {73
return links[bit] != null;76
public void inc(int bit) {