题面

设 \(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(); }

Nikitosh 和异或的更多相关文章

  1. 「LOJ#10051」「一本通 2.3 例 3」Nikitosh 和异或(Trie

    题目描述 原题来自:CODECHEF September Challenge 2015 REBXOR 1​​≤r​1​​<l​2​​≤r​2​​≤N,x⨁yx\bigoplus yx⨁y 表示 ...

  2. Nikitosh 和异或(trie树)

    题目: #10051. 「一本通 2.3 例 3」Nikitosh 和异或 解析: 首先我们知道一个性质\(x\oplus x=0\) 我们要求\[\bigoplus_{i = l}^ra_i\]的话 ...

  3. 【Trie】Nikitosh 和异或

    [参考博客]: LOJ#10051」「一本通 2.3 例 3」Nikitosh 和异或(Trie [题目链接]: https://loj.ac/problem/10051 [题意]: 找出两个不相交区 ...

  4. #10051 Nikitosh 和异或

    Nikitosh 和异或 其实题意已经简单的不能再简单了,所以就不讲了. 因为题目中 \(1\leq l_1 \leq r_1 <l_2 \leq r_2\leq N\),所以显然对于最终答案, ...

  5. Nikitosh 和异或 —— 一道 trie 树的题用可持久化 trie 水 然后翻车了...

    题意简介 题目就是叫你找两个不重合的非空区间,使得这两个区间里的数异或后相加的和最大 (看到异或,没错就决定是你了可持久化trie!) 思路 水一波字典树,莫名觉得这题可持久化能过,于是水了一发挂了, ...

  6. BZOJ4260,LOJ10051 Nikitosh 和异或

    题意 给定一个含 \(N\) 个元素的数组 \(A\),下标从 \(1\) 开始.请找出下面式子的最大值:\((A[l_1]\bigoplus A[l_1+1]\bigoplus -\bigoplus ...

  7. loj题目总览

    --DavidJing提供技术支持 现将今年7月份之前必须刷完的题目列举 完成度[23/34] [178/250] 第 1 章 贪心算法 √ [11/11] #10000 「一本通 1.1 例 1」活 ...

  8. [一本通学习笔记] 字典树与 0-1 Trie

    字典树中根到每个结点对应原串集合的一个前缀,这个前缀由路径上所有转移边对应的字母构成.我们可以对每个结点维护一些需要的信息,这样即可以去做很多事情. #10049. 「一本通 2.3 例 1」Phon ...

  9. Trie学习总结

    Trie树学习总结 字典树,又称前缀树,是用于快速处理字符串的问题,能做到快速查找到一些字符串上的信息. 另外,Trie树在实现高效的同时,会损耗更多的空间,所以Trie是一种以空间换时间的算法. T ...

随机推荐

  1. HCNA Routing&Switching之静态路由

    前文我们聊到了路由的相关概念和路由基础方面的话题,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/14947897.html:今天我们聊聊静态路由相关话题: 回顾 ...

  2. 【BZOJ 4771】七彩树

    一直TLE的原因竟然是数组开太大了导致\(memset\)清空耗时超限,亏我还调了1天啊(T^T) 题目大意 给定一颗树,每个节点都有一个颜色,要求多次询问某个节点\(x\)的子树中深度不超过\(d\ ...

  3. Linux下如何使用Rsync备份服务器重要数据

    Rsync介绍: Rsync英文全称Remote synchronization,从软件的名称就可以看出来,Rsync具有可使本地和远程两台主机之间的数据快速复制同步镜像,远程备份的功能,这个功能类似 ...

  4. JAVA入门基础及流程控制

    JAVA入门基础及流程控制 数据类型 位 存储单位 eg:0001 0011 八位 字节 byte 处理数据单位 一字节等于八位 eg:1b=0011 0001 类变量: static int num ...

  5. python使用笔记28--unittest单元测试框架

    单元测试:开发程序的人自己测试自己的代码 unittest自动化测试框架 1.单元测试 unittest框架,执行的顺序是按照方法名的字母来排序的 setUpClass方法是最开始执行的 tearDo ...

  6. 交通规则:HOV车道

    多乘员车道的限行时间一般为工作日上下班高峰,车上只有一个人时不能走该车道

  7. 高性能内存图数据库RedisGraph(二)

    这篇文章主要介绍用一下RedisGraph的历史和现状. 2018年5月,Redis Labs发布了RedisGraph的预览/测试版.6个月后,在Redis Labs和开源社区的开发者们的共同努力下 ...

  8. linux查看电脑温度

    sudo apt-get install lm-sensors # 安装yes | sudo sensors-detect # 侦测所有感测器 sensors # 查看温度

  9. python内置函数dir()

    描述 dir() 函数不带参数时,返回当前范围内的变量.方法和定义的类型列表:带参数时,返回参数的属性.方法列表.如果参数包含方法__dir__(),该方法将被调用.如果参数不包含__dir__(), ...

  10. selenium 配置ie11 浏览器

    1.IEDriverServer下载与配置 用淘宝的镜像地址:https://npm.taobao.org/mirrors/selenium/. 选3.0版本的  IEDriverServer_x64 ...