CHOI 1602 The XOR Largest Pair

trie+贪心

#include<bits/stdc++.h>
using namespace std;
const int N=1e5+10;
int a[35],ch[N*35][2],sum[N*35],rt=1,sz=1,temp;
int query(){
    int k=rt;
    for(int i=32;i>=1;--i){
        if(ch[k][!a[i]])k=ch[k][!a[i]];
        else k=ch[k][a[i]];
    }
    return temp^sum[k];
}
void build(){
    int k=rt;
    for(int i=32;i>=1;--i){
        if(!ch[k][a[i]])ch[k][a[i]]=++sz;
        k=ch[k][a[i]];
    }
    sum[k]=temp;
}
int main(){
    int n,ans=0;
    scanf("%d",&n);
    for(int i=1;i<=n;++i){
        int t;
        scanf("%d",&t);temp=t;
        memset(a,0,sizeof(a));
        for(int j=1;j<=32;++j){
            if(t&1)a[j]=1;
            t>>=1;
        }
        if(i!=1)ans=max(ans,query());
        build();
    }
    printf("%d",ans);
    return 0;
}
View Code
原文地址:https://www.cnblogs.com/Dream-Runner/p/10168145.html