Trie数模板2 problem

这道题然后我们求最大异或对,我们很容易想出来 \(O(n^2)\) 的做法,两层循环遍历搞定

然后我们知道这样是肯定是肯定过不了的,我们考虑用字典树解决,然后我们来看如何插入和查找。

具体操作

我们考虑先插入再查找,因为刚开始字典树是空的,如果先查找是不行的。

1.插入

跟上一篇差不多,我们就当没有相同分支的时候,就新建一个分支就行了,由于是二进制,所以分支最多为两个,这也是跟上一篇插入字符串不一样的地方。

2.查找

我们首先得知道,异或运算的基本原理,这里稍微阐述一下

 11001
^10101
--------
01101

某一位两个数这一位的值相等,值为0,反之为1

所以我们再进行查找的时候,要尽力查找位数上的值不一样的才行!当然,如果没有,就只能将就,我们这里边查找边计算就可以了,每次将值乘 \(2\) 在加上查找的值就行了。

#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std; const int N = 1e5 + 10; int n;
int a[N];
int son[N * 31][2], idx;//二进制 void insert(int x)
{
int p = 0;
for (int i = 30; i >= 0; i -- )
{
int u = x >> i & 1;//取出来这一位二进制是多少
if(!son[p][u]) son[p][u] = ++ idx;
p = son[p][u];
}
} int query(int x)
{
int p = 0, res = 0;
for (int i = 30; i >= 0; i -- )
{
int u = x >> i & 1;
if(son[p][!u])
{
p = son[p][!u];
res = res * 2 + !u;
}
else
{
p = son[p][u];
res = res * 2 + u;
}
}
return res;
} int main()
{
scanf("%d", &n);
for (int i = 0; i < n; i ++ )
scanf("%d", &a[i]);
int res = 0;
for (int i = 0; i < n; i ++ )
{
insert(a[i]);
int t = query(a[i]);
res = max(res, a[i] ^ t);
}
printf("%d\n",res);
return 0;
}

Trie树模板2的更多相关文章

  1. HDU 1251 Trie树模板题

    1.HDU 1251 统计难题  Trie树模板题,或者map 2.总结:用C++过了,G++就爆内存.. 题意:查找给定前缀的单词数量. #include<iostream> #incl ...

  2. Phone list(Trie树模板)

    Phone List 共t组数据,给定n个长度不超过10的字符串,问其中是否存在两个数S,T,使得S是T的前缀. 存在则输出NO,不存在输出YES 输入样例#1: 2 3 911 97625999 9 ...

  3. poj3630 Phone List (trie树模板题)

    Phone List Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 26328   Accepted: 7938 Descr ...

  4. HDU 1251 统计难题 (Trie树模板题)

    题目链接:点击打开链接 Problem Description Ignatius最近遇到一个难题,老师交给他很多单词(只有小写字母组成,不会有重复的单词出现),现在老师要他统计出以某个字符串为前缀的单 ...

  5. Trie树模板1字符串统计

    Trie树模板1字符串统计 我们首先来了解一下字典树,首先看一下一张字典树的图片 字典树就是一个可以高效存储.查找字符串的树,比如上面这个字典树就是存储abc,acb,bac的字典树. 1.插入操作( ...

  6. hiho #1014 : Trie树(模板)

    Trie树 [题目链接]Trie树 &题意: 输入 输入的第一行为一个正整数n,表示词典的大小,其后n行,每一行一个单词(不保证是英文单词,也有可能是火星文单词哦),单词由不超过10个的小写英 ...

  7. LightOJ 1129 - Consistency Checker Trie树模板

    题意:给出n条串判断是否存在一个串为另一个串的前缀. 思路:套Trie树的模板,先全部插入,再查找每个字串,如果查找字串完毕,但还存在下一个节点,说明存在前缀. /** @Date : 2016-11 ...

  8. trie树模板(统计难题)

    统计难题 Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 131070/65535 K (Java/Others)Total Submi ...

  9. Trie树模板~~~

    * + ; ; // 字母表为全体小写字母的Trie struct Trie { int ch[maxnode][sigma_size]; int val[maxnode]; int sz; // 结 ...

随机推荐

  1. 1.7 Linux系统的优缺点

    本节,我们介绍一下 Linux 系统的优缺点.Linux 不可比拟的优势如下. 1) 大量的可用软件及免费软件 Linux 系统上有着大量的可用软件,且绝大多数是免费的,比如声名赫赫的 Apache. ...

  2. CentOS 7 执行 yum 命令失败问题的排查方法

    一个执着于技术的公众号 简介 本文主要为大家讲解 CentOS 7系统中执行yum命令失败等常见问题的排查方法. 1.执行yum命令报404错误 1)检查yum仓库是否配置正确,可以到阿里云下载rep ...

  3. BGP路由协议详解(完整版)

    (免责声明:来源于网络,版权原作者所有,转载仅为了传播.学习交流使用,如需删除请私信联系,严禁其他用途.) END 关注「开源Linux」加星标,提升IT技能 好文章,分享.点赞.在看三连哦️↓↓↓

  4. IDEA通用配置

    文件的自动author注释

  5. form表单,css简介,css选择器,css样式操作

    form表单 简介 表单在Web网页中用以让访问者输入数据,当提交表单时,表单中输入的数据被打包传递给Web服务器端的程序 以处理,从而使得Web服务器与用户之间具有交互功能. 表单实现前后台交互:用 ...

  6. OPRF

    在PSI中经常用到OPRF技术,现在系统学习一下. PRF Pseudo Random Function,伪随机函数,主要就是用来产生为伪随机数的. 伪随机数 什么伪随机数? 伪随机数是用确定性的算法 ...

  7. .netcore6.0自己配置swagger

    环境:.net core6.0 一.安装依赖包:Swashbuckle.AspNetCore 二.右击项目->属性->生成->输出,勾选文档文件,然后配置文件生成路径,注意是相对路径 ...

  8. 【mq】从零开始实现 mq-11-消费者消息回执添加分组信息 pull message ack groupName

    前景回顾 [mq]从零开始实现 mq-01-生产者.消费者启动 [mq]从零开始实现 mq-02-如何实现生产者调用消费者? [mq]从零开始实现 mq-03-引入 broker 中间人 [mq]从零 ...

  9. 关于position的relative和absolute分别是相对于谁进行定位的

    position:absolute; 他的意思是绝对定位,他是参照浏览器的左上角,配合TOP.RIGHT.BOTTOM.LEFT(下面简称TRBL)进行定位,在没有设定TRBL,默认依据父级的做标原始 ...

  10. Java实现飞机大战游戏

    飞机大战详细文档 文末有源代码,以及本游戏使用的所有素材,将plane2文件复制在src文件下可以直接运行. 实现效果: 结构设计 角色设计 飞行对象类 FlyObject 战机类 我的飞机 MyPl ...