Input

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

Output

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

Sample Input

5
1 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的方向找。

很好理解吧。

 #include<cstring>
#include<cmath>
#include<algorithm>
#include<iostream>
#include<cstdio>
#define N 400007
using namespace std; int n,cnt=;
int a[N],lmx[N],rmx[N];
struct Node
{
int point[];
void init()
{
point[]=point[]=;
}
}trie[*]; void insert(int x)
{
int now=;
for (int i=,t;i>=;i--)
{
if (x&(<<i)) t=;
else t=;
if (!trie[now].point[t]) trie[now].point[t]=++cnt;
now=trie[now].point[t];
}
}
int calc(int x)
{
int now=,ans=;
for (int i=,t;i>=;i--)
{
if (x&(<<i)) t=;
else t=;
if (trie[now].point[t^])
{
ans=ans+(<<i);
now=trie[now].point[t^];
}
else now=trie[now].point[t];
}
return ans;
}
int main()
{
scanf("%d",&n);
for (int i=;i<=n;i++)
scanf("%d",&a[i]);
int x=;insert(x);
for (int i=;i<=n;i++)
{
x=x^a[i];
insert(x);
lmx[i]=max(lmx[i-],calc(x));
} cnt=;
for (int i=;i<*;i++) trie[i].init(); x=;insert(x);
for (int i=n;i>=;i--)
{
x=x^a[i];
insert(x);
rmx[i]=max(rmx[i+],calc(x));
}
int ans=-;
for (int i=;i<=n;i++)
ans=max(ans,lmx[i-]+rmx[i]);
printf("%d\n",ans);
}

最新文章

  1. CSS实现弹出导航菜单
  2. 利用PHP取二进制文件头判断文件类型
  3. VS使用Sublime Text 主题
  4. java发展史与java的语言特性
  5. ssh远程执行命令并自动退出(已测试通过)
  6. [FTP] FTPHelper-FTP帮助类,常用操作方法 (转载)
  7. Java基础知识强化64:基本类型包装类的引入
  8. 谈论高并发(二十二)解决java.util.concurrent各种组件(四) 深入了解AQS(二)
  9. hdu Eddy&#39;s picture (最小生成树)
  10. 反射技术在Android中的应用
  11. 201521123107 《Java程序设计》第10周学习总结
  12. 【Telerik控件学习】-建立自己的图形编辑工具(Diagram)
  13. Vue学习笔记-Vue基础入门
  14. 用Vue中遇到的问题和处理方法
  15. 将简单的lambda表达式树转为对应的sqlwhere条件
  16. 关于jstl的使用
  17. Dynamics CRM build numbers
  18. 【3】Asp.Net Core2.2新版管道处理模型
  19. linux - awk 和kill 批量杀死进程
  20. 安装配置fastDFS文件服务器 - Linux

热门文章

  1. [转]VC中调用外部exe程序方式
  2. P1664 每日打卡心情好
  3. Winform datagridview 基础
  4. 洛谷P2763 试题库问题(最大流)
  5. 判断空间上三个点是否共线问题【找bug篇】
  6. C# 调用第三方DLL缓冲区溢出导致的异常
  7. iOS8扩展插件开发配置
  8. free - 显示系统中已用和未用的内存空间总和.
  9. QTreeWidgetItem封装
  10. CAD交互绘制圆(网页版)