CSU 1216 异或最大值
Posted BK_201
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CSU 1216 异或最大值相关的知识,希望对你有一定的参考价值。
题目:http://acm.csu.edu.cn/csuoj/problemset/problem?pid=1216
模板题
#include<iostream> #include<cstdio> #include<cstring> #include<string> #include<cmath> #include<algorithm> #include<vector> #include<queue> #include<stack> #include<map> #include<set> using namespace std; const int N=1e5+5; int ch[32*N][2]; int val[32*N]; int a[N]; int tot; void init() { tot=0; memset(ch[0],0,sizeof(ch[0])); } void Insert(int x) { int now=0; for(int i=31;i>=0;i--) { int t=x>>i&1; if (!ch[now][t]) { ch[now][t]=++tot; memset(ch[tot],0,sizeof(ch[tot])); } now=ch[now][t]; } val[now]=x; } int query(int x) { int now=0; for(int i=31;i>=0;i--) { int t=x>>i&1; if (ch[now][t^1]) now=ch[now][t^1]; else now=ch[now][t]; } return val[now]; } int main() { int n; while(scanf("%d",&n)!=EOF) { init(); for(int i=1;i<=n;i++) { scanf("%d",&a[i]); Insert(a[i]); } int ans=0; for(int i=1;i<=n;i++) { int t=query(a[i]); ans=max(ans,a[i]^t); } printf("%d\n",ans); } return 0; }
以上是关于CSU 1216 异或最大值的主要内容,如果未能解决你的问题,请参考以下文章
(ST表+二分+前缀和)CSU 1879 - Hack Protection
LeetCode810. 黑板异或游戏/455. 分发饼干/剑指Offer 53 - I. 在排序数组中查找数字 I/53 - II. 0~n-1中缺失的数字/54. 二叉搜索树的第k大节点(代码片段