01 trie板子
用于快速求出一个序列 其中两个值 的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;
}
};

浙公网安备 33010602011771号