用于快速求出一个序列 其中两个值 的xor最大值
由于 从高位到低位 找与给定数 数位相反 的路径
所以底层逻辑是贪心,并且正确性显然
struct trie{int ch[maxn*31][2],idx;void insert(int x){int p=0;for(int i=31;i>=0;i--){int j= (x>>i)&1;if(!ch[p][j])ch[p][j]=++idx;p=ch[p][j];}}int query(int x){int p=0,res=0;for(int i=31;i>=0;i--){int j= (x>>i)&1;if(ch[p][!j]){res+= (1<<i);//累加边权 p=ch[p][!j];}else{p=ch[p][j];}}return res;}
};