题面

设 \(l_{i}\) 为以 \(i\) 为结尾的区间中最大的一段异或值,\(r_{i}\) 为以 \(i\) 为开头的区间中最大的一段异或值。

则有

\[l_{i}=\max\left(l[i-1],sum_{l-1}\oplus sum_{r}\right)
\]
\[r_{i}=\max\left(r[i+1],sum_{l-1}\oplus sum_{r}\right)
\]

\(sum_{i}\) 为异或前缀和,跟前缀和是差不多的,就是运算的方式改成了异或。

最后的答案则为

\[ans=\max\left(ans,l_{i}+r_{i+1}\right)
\]

然后丢到01Trie上就可以了。

Code:

#include<cstdio>
#define MAX 400001
#define re register
namespace OMA
{
int n;
int l[MAX],r[MAX];
int sum[MAX],num[MAX];
struct Trie
{
int tot;
int ch[MAX*31][2];
inline void insert(int x)
{
int u = 0;
for(re int i=30; i>=0; i--)
{
int pos = (x>>i)&1;
if(!ch[u][pos])
{ ch[u][pos] = ++tot; }
u = ch[u][pos];
}
}
inline int query(int x)
{
int u = 0,ans = 0;
for(re int i=30; i>=0; i--)
{
int pos = (x>>i)&1;
if(ch[u][pos^1])
{ u = ch[u][pos^1],ans += 1<<i; }
else
{ u = ch[u][pos]; }
}
return ans;
}
}tree;
inline int max(int a,int b)
{ return a>b?a:b; }
inline int read()
{
int s=0,w=1; char ch=getchar();
while(ch<'0'||ch>'9'){ if(ch=='-')w=-1; ch=getchar(); }
while(ch>='0'&&ch<='9'){ s=s*10+ch-'0'; ch=getchar(); }
return s*w;
}
signed main()
{
n=read();
int ans = 0;
for(re int i=1; i<=n; i++)
{ num[i] = read(); }
for(re int i=1; i<=n; i++)
{ tree.insert(sum[i] ^= sum[i-1]^num[i]); }
for(re int i=1; i<=n; i++)
{ l[i] = max(l[i-1],tree.query(sum[i])); }
for(re int i=1; i<=n; i++)
{ sum[i] = 0; }
for(re int i=n; i>=1; i--)
{ tree.insert(sum[i] ^= sum[i+1]^num[i]); }
for(re int i=n; i>=1; i--)
{ r[i] = max(r[i+1],tree.query(sum[i])); }
for(re int i=1; i<n; i++)
{ ans = max(ans,l[i]+r[i+1]); }
printf("%d\n",ans);
return 0;
}
}
signed main()
{ return OMA::main(); }

最新文章

  1. Android 圆形图片加白边加阴影
  2. Java基础知识回顾
  3. 第一次接触OOM
  4. 从webRoot中下载Excel
  5. eclipse导入svn项目,项目却没有svn的标记
  6. Spring配置文件解析--依赖注入
  7. ios深拷贝,浅拷贝,拷贝自定义对象的简单介绍(转)
  8. angularjs--$watch、$watchGroup、$watchCollection含义
  9. [转] python程序的调试方法
  10. Debug Assertion Failed!
  11. STL之stack
  12. (简单) UVA 11624 Fire! ,BFS。
  13. javascript 学习笔记 -- js获取本地文件信息
  14. docker用法记录
  15. VMware Workstation 12 Pro安装CentOs图文教程(超级详细)
  16. iOS XML解析使用-韩国庆
  17. JavaScript中的slice函数
  18. python - str和repr方法:
  19. 检查iOS项目中是否使用了IDFA
  20. 全文居中及DIV居中

热门文章

  1. android实现计时器(转)
  2. git时 Failed to connect to 127.0.0.1 port 1080: Connection refused
  3. Selenium启动Firefox示例(java版)
  4. 第 1 题:HTML 和 HTML5 有什么区别?
  5. Java基础00-IO流27
  6. [刘阳Java]_SpringMVC与Struts2的对比_第12讲
  7. 如何快速更新长缓存的 HTTP 资源
  8. EasyUI:combotree(树形下拉框)复选框选中父节点(子节点的状态也全部选中)输入框中只显示父节点的文本值
  9. [HNOI2008]GT考试 题解
  10. 【贪心】数列分段Section I luogu-1181