The XOR Largest Pair(tire树)
2024-10-17 01:12:30
题目
解析
一年前听学长讲这道题,什么01trie,好高级啊,所以没学,现在一看。。。。
看到xor就应该想到二进制,一看数据\(A_i< 2^{31}\),考虑把所有的数都处理成长度为32的二进制数,插入字典树中,查询的时候就逐位比较,有不同的先走不同的那边,这样保证了每次插入一个数时查询的结果是最大的,然后不断更新最大值就可以了
我这种不用位运算的懒人就直接用bitset维护了
从高位到地位插入可能好算一些
代码
#include <bits/stdc++.h>
using namespace std;
const int N = 4e6 + 10;
int n, a, num, ans;
struct node {
int nx[2];
} e[N];
void insert(int n) {
bitset<35>s(n);
int rt = 0;
for (int i = 30; i >= 0; --i) {
int v = (int)s[i];
if (!e[rt].nx[v]) e[rt].nx[v] = ++num;
rt = e[rt].nx[v];
}
}
int query(int x) {
bitset<35>s(x);
int rt = 0, ret = 0;
for (int i = 30; i >= 0; --i) {
int v = (int)s[i];
if (e[rt].nx[v ^ 1]) ret = ret << 1 | 1, rt = e[rt].nx[v ^ 1];
else ret <<= 1, rt = e[rt].nx[v];
}
return ret;
}
int main() {
cin >> n;
for (int i = 1, x; i <= n; ++i) {
cin >> x;
ans = max(ans, query(x));
insert(x);
}
cout << ans;
}
最新文章
- Ubuntu设置root用户登录图形界面
- cocos2d-x项目实现android视频播放参考链接
- chrome dev debug network 的timeline说明
- 创建一个带模版的用户控件 V.2
- 在Android上使用Google V8 JS 引擎
- ORA-01078:failure in processing system parameters
- C程序第二章节:算法
- ecshop中的$user对象
- HBase缓存的使用
- js图片预加载与延迟加载
- httpd2.4.6配置文件解释说明
- Confluence 6 管理协同编辑 - 审计的考虑
- STM32定时器T2纯软件仿真时间准确,JTAG在线调试查看时间不准的问题
- show_space查看对象空间使用情况
- Hibernate的状态,缓存和映射
- python三层架构
- [试玩] FMXLinux (Firemonkey for Linux) Linux 桌面开发(第三方插件)
- UIAlertAction 改变字体颜色
- dell n2024交换机配置
- HTML如何禁止input输入