博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【bzoj4260】 Codechef REBXOR trie树
阅读量:5107 次
发布时间:2019-06-13

本文共 1107 字,大约阅读时间需要 3 分钟。

 

Input

输入数据的第一行包含一个整数N,表示数组中的元素个数。
第二行包含N个整数A1,A2,…,AN。
 
 

 

Output

输出一行包含给定表达式可能的最大值。
 

 

Sample Input

51 2 3 1 2

Sample Output

6

Hint

 

满足条件的(l1,r1,l2,r2)有:(1,2,3,3),(1,2,4,5),(3,3,4,5)。

 

对于100%的数据,2 ≤ N ≤ 4*105,0 ≤ Ai ≤ 109。
 
题解:
其实很好想的,维护一个lmx[i]表示到1-i中最大的连续的xor和。
rmx[i]表示i-n重最大的连续的xor和,然后就是前缀和的形式
插入字典树,然后在字典树中找两个值的xor最大值。
就是找1的时候向0的方向找,0的时候向1的方向找。

很好理解吧。

1 #include
2 #include
3 #include
4 #include
5 #include
6 #define N 400007 7 using namespace std; 8 9 int n,cnt=1;10 int a[N],lmx[N],rmx[N];11 struct Node12 {13 int point[2];14 void init()15 {16 point[1]=point[0]=0;17 }18 }trie[400007*30];19 20 void insert(int x)21 {22 int now=1;23 for (int i=31,t;i>=0;i--)24 {25 if (x&(1<
=0;i--)35 {36 if (x&(1<
=1;i--)65 {66 x=x^a[i];67 insert(x);68 rmx[i]=max(rmx[i+1],calc(x));69 }70 int ans=-1;71 for (int i=2;i<=n;i++)72 ans=max(ans,lmx[i-1]+rmx[i]);73 printf("%d\n",ans); 74 }

 

转载于:https://www.cnblogs.com/fengzhiyuan/p/7732359.html

你可能感兴趣的文章
[转]win7下修改C盘USERS文件下的名称
查看>>
HowTo:freeswitch在多网卡服务器下如何配置
查看>>
C语言中隐藏结构体定义的方法
查看>>
“父窗口拖动的时候Popup不随着父窗口移动”问题的解决方案
查看>>
Android源码:(一) 安卓2.1到4.4操作系统通用的Actionbar实现的tab导航例子。
查看>>
Ubuntu 下安装 CCNx0.8.2
查看>>
UVA-227 Puzzle(模拟)
查看>>
基于ruby的watir自动化测试 笔记一
查看>>
FTP服务器FileZilla Server配置及使用方法
查看>>
python radix算法实现
查看>>
globals和locals的区别
查看>>
delphi 动态数组
查看>>
JDK动态代理和CGLIB的区别
查看>>
js 日期证有效性验的通用方法
查看>>
PHP日常排错
查看>>
2142134
查看>>
【软件需求工程与建模 - 小组项目】第6周 - 成果展示3 - 软件设计规格说明书V4.1...
查看>>
Delphi子窗体随主窗体大小而变化
查看>>
JavaBean与xml互转的方法详解
查看>>
html中css三种常见的样式选择器
查看>>