AcWing 143. 最大异或对

在给定的N个整数选出两个进行xor(异或)运算,得到的结果最大是多少?

 

#include<bits/stdc++.h>
using namespace std;
const int N=4e6+10;
int ch[N][2],n,a,ans,tot=1;
void insert()
{
    int u=1;
    for(int i=30;i>=0;i--)
    {
        int v=(a>>i)&1;
        if(!ch[u][v])ch[u][v]=++tot;
        u=ch[u][v];
    }
}
void query()
{
    int u=1,tmp=0;
    for(int i=30;i>=0;i--)
    {
        int v=(a>>i)&1?0:1;
        if(ch[u][v])tmp+=(1<<i),u=ch[u][v];
        else u=ch[u][!v]; 
    }
    ans=max(ans,tmp);
}
int main()
{
    cin>>n;
    for(int i=1;i<=n;i++)
    {
        scanf("%d",&a);
        query();
        insert();
    } 
    cout<<ans<<endl;
    return 0;
} 

 

posted @ 2021-01-08 17:00  君与  阅读(48)  评论(0编辑  收藏  举报