您当前的位置: 首页 > 

*DDL_GzmBlog

暂无认证

  • 1浏览

    0关注

    605博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

[Acwing] 143. 最大异或对 Tire树

*DDL_GzmBlog 发布时间:2021-10-12 11:07:16 ,浏览量:1

前言

一看就是Tire树 一做就不会

思路

常规暴力解法: O n 2 n^2 n2 枚举出 所有选法取最大即可

使用Tire树优化第二层循环: O n l o g n nlogn nlogn , 使用Tire存放每个数的 二进制数 即 T i r e [ N ∗ 31 ] [ 2 ] Tire[N*31][2] Tire[N∗31][2]

然后我们在枚举每一个 a [ i ] a[i] a[i]的时候,

  • 如果 a [ i ] a[i] a[i]是1 那么我们就走 0
  • 反之则然

因此这样子就保证了对于每个 a [ i ] a[i] a[i]我们都可以取得最大值

CODE
#include 
using namespace std;
const int N = 1e5+10,M=3100010;
int n;
int a[N],son[M][2],idx;

void insert(int x)
{
    int p = 0;

    for(int i=30;i>=0;i--)
    {
        int &s = son[p][x>>i&1];

        if(!s)
        s = ++idx;

        p = s;
    }
}

int search(int x)
{
    int p = 0 ,res = 0;
    for(int i =30;i>=0;i--)
    {
        int s = x>>i&1;
        
        if(son[p][!s])
        {
            res += 1n;
    for(int i=0;i>a[i];
        insert(a[i]);
    }
    int res = 0;
    for(int i=0;i            
关注
打赏
1657615554
查看更多评论
0.0370s