题意:给定\(a[1...n]\),求\((a_i⊕a_i+1⊕...⊕a_j)+(a_p⊕a_{p+1}⊕...⊕a_{q})\)的最大值,其中\(1≤i≤j<p≤q≤n\)

前后缀最优解预处理后然后枚举断点即可

/*H E A D*/
struct trie{
int ch[maxn<<5][2],sz[maxn<<5],val[maxn<<5],tot,root;
void init(){
ch[0][0]=ch[0][1]=0;
sz[0]=0;val[0]=0;
tot=1;root=0;
}
void insert(int x){
int c,now=root;
for(int k = 30; k >= 0; k--){
c=((x>>k)&1);
if(!ch[now][c]){
ch[tot][0]=ch[tot][1]=0;
sz[tot]=0;val[tot]=0;
ch[now][c]=tot++;
}
now=ch[now][c];
sz[now]++;
}
val[now]=x;
}
void update(int x,int d){
int c,now=root;
for(int k = 30; k >= 0; k--){
c=((x>>k)&1);
now=ch[now][c];
sz[now]+=d;
}
}
int query(int x){
int c,now=root;
for(int k = 30; k >= 0; k--){
c=((x>>k)&1);
if(ch[now][c^1]&&sz[ch[now][c^1]]) now=ch[now][c^1];
else now=ch[now][c];
}
return x^val[now];
}
}trie;
int n,ans,a[maxn],pre[maxn],suf[maxn],mpre[maxn],msuf[maxn];
int main(){
while(scanf("%d",&n)!=EOF){
for(int i = 1; i <= n; i++){
scanf("%d",&a[i]);
}
pre[0]=suf[n+1]=0;
for(int i = 1; i <= n; i++){
pre[i]=pre[i-1]^a[i];
}
for(int i = n; i > 0; i--){
suf[i]=suf[i+1]^a[i];
}
memset(mpre,0,sizeof mpre);trie.init();trie.insert(0);
for(int i = 1; i <= n; i++){
mpre[i]=max(mpre[i-1],trie.query(pre[i-1]));
trie.insert(pre[i]);
}
memset(msuf,0,sizeof msuf);trie.init();trie.insert(0);
// for(int i = n; i > 0; i--){
// msuf[i]=max(msuf[i+1],trie.query(suf[i+1]));
// trie.insert(suf[i]);
// }
// ans=0;
// for(int i = n; i > 0; i--){
// ans=max(ans,msuf[i]+mpre[i-1]);
// }
for(int i = n ; i > 0; i--){
ans=max(ans,trie.query(suf[i])+mpre[i-1]);
trie.insert(suf[i]);
}
printf("%d\n",ans);
}
return 0;
}

BZOJ - 4260 01字典树+前后缀的更多相关文章

  1. 字典树基础进阶全掌握(Trie树、01字典树、后缀自动机、AC自动机)

    字典树 概述     字典树,又称单词查找树,Trie树,是一种树形结构,是一种哈希树的变种.典型应用是用于统计,排序和保存大量的字符串(但不仅限于字符串),所以经常被搜索引擎系统用于文本词频统计.它 ...

  2. BZOJ 4260 Codechef REBXOR (区间异或和最值) (01字典树+DP)

    <题目链接> 题目大意:给定一个序列,现在求出两段不相交的区间异或和的最大值. 解题分析: 区间异或问题首先想到01字典树.利用前缀.后缀建树,并且利用异或的性质,相同的两个数异或变成0, ...

  3. [BZOJ4260] Codechef REBXOR (01字典树,异或前缀和)

    Description Input 输入数据的第一行包含一个整数N,表示数组中的元素个数. 第二行包含N个整数A1,A2,-,AN. Output 输出一行包含给定表达式可能的最大值. Sample ...

  4. Codeforces Round #367 (Div. 2)---水题 | dp | 01字典树

    A.Beru-taxi 水题:有一个人站在(sx,sy)的位置,有n辆出租车,正向这个人匀速赶来,每个出租车的位置是(xi, yi) 速度是 Vi;求人最少需要等的时间: 单间循环即可: #inclu ...

  5. 字典树&&01字典树专题&&对字典树的理解

    对于字典树和01字典树的一点理解: 首先,字典树建树的过程就是按照每个数的前缀来的,如果你要存储一个全小写字母字符串,那么这个树每一个节点最多26个节点,这样的话,如果要找特定的单词的话,按照建树的方 ...

  6. CodeForeces 842d Vitya and Strange Lesson ——(带lazy标记的01字典树)

    给一个序列,每次操作对这个序列中的所有数异或一个x,问每次操作完以后整个序列的mex值. 做法是去重后构建01字典树,异或x就是对root加一个x的lazy标志,每次pushDown时如果lazy的这 ...

  7. Chip Factory---hdu5536(异或值最大,01字典树)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5536 题意:有一个数组a[], 包含n个数,从n个数中找到三个数使得 (a[i]+a[j])⊕a[k] ...

  8. Xor Sum---hdu4825(01字典树模板)

    题目链接:http://acm.split.hdu.edu.cn/showproblem.php?pid=4825 题意:有n个数m个查找,每个查找有一个数x, 从序列中找到一个数y,使得x异或y最大 ...

  9. hdu5296 01字典树

    根据二进制建一棵01字典树,每个节点的答案等于左节点0的个数 * 右节点1的个数 * 2,遍历整棵树就能得到答案. AC代码: #include<cstdio> using namespa ...

随机推荐

  1. 598. Range Addition II 矩阵的范围叠加

    [抄题]: Given an m * n matrix M initialized with all 0's and several update operations. Operations are ...

  2. Process management of windows

    igfxem.exe进程是正常的进程.是intel家的核显驱动类的进程.核显即"核芯显卡",是指GPU部分它是与CPU建立在同一内核芯片上,两者完全融合的芯片."核芯显卡 ...

  3. 实践作业3:白盒测试---细化明确任务DAY5

    收到老师给我写的评论,感觉老师真的太认真,每个博客都有仔细的,参考了老师发给我的博客,我才明白老师想要的博客内容原来是具体实际的进展记录.我们组其实这些东西早就确定了,会议也开了,但是我之前不明白博客 ...

  4. ROW_NUMBER分页

    var query = string.Format("SELECT {0} FROM (SELECT ROW_NUMBER() OVER (ORDER BY {3}) AS RowNum, ...

  5. telerik 值得学习 web mvc 桌面 控件大全

    http://www.telerik.com http://www.dxper.net/forum-70-1.html http://www.dxper.net/forum.php

  6. MVC - Model - Controller - View

    一. Model 1.1 在ASP.NET MVC 中 model 负责的是所有与 "数据“  相关的的任务. 也可以把Model 看成是 ASP.NET  中三层模式的 BLL层 加 DA ...

  7. HTML 5+CSS 3网站布局应用教程 (赵振方) 随书光盘 ​

    <HTML5+CSS3网站布局应用教程>全面介绍HTML 5与CSS 3进行Web设计的知识.全书由16章组成.主要内容包括:主流浏览器对HTML 5的支持情况.HTML 5与HTML4在 ...

  8. 以太坊系列之十二: solidity变量存储

    solidity中变量的存储 变量存储主要分为两个区域,一个是storage(对应指定是SLOAD,SSTORE),一个是Memory(MLOAD,MSTORE), 这和普通编程语言的内存模型是不一样 ...

  9. 「CF932E」 Team Work

    题目链接 戳我 题意 有\(n\)个箱子,从中选出\(i\)个箱子,然后把\(k\)个不同的球装在这\(i\)个箱子中,求方案数. 实际上这题就是求: \[ \sum_{i=1}^nc_n^i*i^k ...

  10. JDK、JRE、JVM三者关系

    一.JDK.JRE.JVM三者的关系 JDK包含了JRE和JVM,JRE包含了JVM,其中JRE中没有javac 附一张官网的详细图: 二.RIA RIA(富客户端):能完成浏览器无法完成的功能,它是 ...