Trie树模板2
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的更多相关文章
- HDU 1251  Trie树模板题
		1.HDU 1251 统计难题 Trie树模板题,或者map 2.总结:用C++过了,G++就爆内存.. 题意:查找给定前缀的单词数量. #include<iostream> #incl ... 
- Phone list(Trie树模板)
		Phone List 共t组数据,给定n个长度不超过10的字符串,问其中是否存在两个数S,T,使得S是T的前缀. 存在则输出NO,不存在输出YES 输入样例#1: 2 3 911 97625999 9 ... 
- poj3630 Phone List  (trie树模板题)
		Phone List Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 26328 Accepted: 7938 Descr ... 
- HDU 1251 统计难题 (Trie树模板题)
		题目链接:点击打开链接 Problem Description Ignatius最近遇到一个难题,老师交给他很多单词(只有小写字母组成,不会有重复的单词出现),现在老师要他统计出以某个字符串为前缀的单 ... 
- Trie树模板1字符串统计
		Trie树模板1字符串统计 我们首先来了解一下字典树,首先看一下一张字典树的图片 字典树就是一个可以高效存储.查找字符串的树,比如上面这个字典树就是存储abc,acb,bac的字典树. 1.插入操作( ... 
- hiho #1014 : Trie树(模板)
		Trie树 [题目链接]Trie树 &题意: 输入 输入的第一行为一个正整数n,表示词典的大小,其后n行,每一行一个单词(不保证是英文单词,也有可能是火星文单词哦),单词由不超过10个的小写英 ... 
- LightOJ 1129 - Consistency Checker Trie树模板
		题意:给出n条串判断是否存在一个串为另一个串的前缀. 思路:套Trie树的模板,先全部插入,再查找每个字串,如果查找字串完毕,但还存在下一个节点,说明存在前缀. /** @Date : 2016-11 ... 
- trie树模板(统计难题)
		统计难题 Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 131070/65535 K (Java/Others)Total Submi ... 
- Trie树模板~~~
		* + ; ; // 字母表为全体小写字母的Trie struct Trie { int ch[maxnode][sigma_size]; int val[maxnode]; int sz; // 结 ... 
随机推荐
- Kubernetes 从入门到进阶实战教程 (2021 最新万字干货版)
			作者:oonamao 毛江云,腾讯 CSIG 应用开发工程师原文:来源腾讯技术工程,https://tinyurl.com/ya3ennxf 写在前面 笔者今年 9 月从端侧开发转到后台开发,第一个系 ... 
- scrapy框架第二天
			1.scrapy数据分析 2.scrapy持久化存储 3.全站数据爬取 4.请求传参 + 五大核心组件 - 创建scrapy工程 scrapy startproject ProName - 切换 ... 
- Focal and Global Knowledge Distillation for Detectors
			一. 概述 论文地址:链接 代码地址:链接 论文简介: 此篇论文是在CGNet上增加部分限制loss而来 核心部分是将gt框变为mask进行蒸馏 注释:仅为阅读论文和代码,未进行试验,如有漏错请不吝指 ... 
- OAuth2授权服务器Id Server一键生成配置原理
			OAuth2客户端的配置参数非常多,虽然Id Server通过控制台可视化解决了创建OAuth2客户端的问题.但是如何进一步降低OAuth2的使用难度,把创建的OAuth2客户端转化为配置成为了刚需, ... 
- 虚拟 DOM 与 DOM Diff
			虚拟 DOM 与 DOM Diff 本文写于 2020 年 9 月 12 日 虚拟 DOM 在今天已经是前端离不开的东西了,因为他的好处实在是太多了. 在<高性能 JavaScript>一 ... 
- MPLS L3  跨域 optionB 配置
			mpls跨域optionB optionB的核心思想是私网路由传递过程是 PE-ASBR1-ASBR2-PE2 在传递过程中私网标签发生了变化(由ASBR重新分配了私网标签),而在数据平面(不考虑PH ... 
- 590. N-ary Tree Postorder Traversal - LeetCode
			Question 590. N-ary Tree Postorder Traversal Solution 题目大意:后序遍历一个树 思路: 1)递归 2)迭代 Java实现(递归): public ... 
- CSS基础学习(二)
			11.CSS背景 ①设置背景颜色(颜色值通常可以用十六进制(如#000000)或者颜色名称(如red)来表示) 属性:background-color 例: body { background-col ... 
- 每天一个 HTTP 状态码 205
			205 Reset Content 205 Reset Content 表示服务器成功地处理了客户端的请求,要求客户端重置它发送请求时的文档视图.这个响应码跟 204 No Content 类似,也不 ... 
- 封装axios请求
			import axios from 'axios' import router from '@/router' axios.defaults.baseURL = system.requestBaseU ... 
