1472 The XOR Largest Pair

1472 The XOR Largest Pair

嗯?ybt这么毒瘤了?例2我就蒙了?
话说这个题感觉是个线段树或者树状数组的题,为什么,感觉这么变态呢,似乎和trie没啥关系
这里Trie的关系就在于把每一个数建立在字典树上,然后进行求异或值,最后比较最大值输出即可,倒是不难理解
这里涉及到一个知识点x>>i表示进行往下搜索一个点

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<string>
#include<cstring>
using namespace std;
const int SIZE=4e6+5;
int n,x;
int cnt=0;
int tree[SIZE][2];
void insert()
{
	int now=0;
	for(int i=30;i>=0;i--)
	{
		int y=x>>i&1;
		if(tree[now][y]==0)//需要新建节点
			tree[now][y]=++cnt;
			
		 now=tree[now][y];
	}
}
int findd()
{
	int now=0,ans=0;
	for(int i=30;i>=0;i--)
	{
		int y=x>>i&1;
		if(tree[now][!y])// 异或
		{
			ans+=1<<i;//记录异或答案 
			now=tree[now][!y];
		 } 
		 else
		 	now=tree[now][y];
	}
	return ans;
}
int main()
{
	cin>>n;
	int res=0;
	while(n--)
	{
		cin>>x;
		insert();//建立Trie树 
		res=max(res,findd());//比较异或的最大值 
	}
	cout<<res<<endl;
	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值