#850. 最大异或对

最大异或对

输入样例

3
1 2 3

输出样例

3
#include<bits/stdc++.h>
using namespace std;

const int N = 1e5+5;
int n, a[N], f[N*31][2], idx;

void minsert(int num){
	int p = 0;
	for(int i=30; i>=0; i--){   //右移i位
		int x = (num >> i) & 1;
		if(!f[p][x]) f[p][x]= ++idx;
		p = f[p][x];
	}
}

int mfind(int num){
	int p = 0;
	int ans = 0;
	for(int i=30; i>=0; i--){
		int x = (num >> i) & 1;
		if(f[p][!x]){
			ans += (1 << i);
			p = f[p][!x];
		}
		else p = f[p][x];
	}
	return ans;
}
int main(){
	cin >> n;
	for(int i=1; i<=n; i++){
		cin >> a[i];
		minsert(a[i]);   //构建trip树
	}
	
	int ans = 0;
	for(int i=1; i<=n; i++) ans = max(ans, mfind(a[i]));
	cout << ans;
	return 0;
}