题意

题目链接

Sol

首先维护出前缀xor和后缀xor

对每个位置的元素插入到Trie树里面,每次找到和该前缀xor起来最大的元素

正反各做一遍,取最大。

记得要开log倍空间qwq。。

#include<bits/stdc++.h>
using namespace std;
const int MAXN = 4e5 + 10;
inline int read() {
char c = getchar(); int x = 0, f = 1;
while(c < '0' || c > '9') {if(c == '-')f =- 1; c = getchar();}
while(c >= '0' && c <= '9') x = x * 10 + c - '0', c = getchar();
return x * f;
}
int N, a[MAXN], s[MAXN], pmx[MAXN], smx[MAXN], ch[MAXN][2], tot;
void insert(int x) {
int now = 0;
for(int i = 0; i <= 30; i++) {
int nxt = (x >> i & 1);
if(!ch[now][nxt]) ch[now][nxt] = ++tot;
now = ch[now][nxt];
}
}
int Query(int x) {
int now = 0, ans = 0;
for(int i = 0; i <= 30; i++) {
int nxt = (x >> i & 1);
if(ch[now][nxt ^ 1]) ans += 1 << i, now = ch[now][nxt ^ 1];
else now = ch[now][nxt];
}
return ans;
}
void solve(int *s, int *mx) {
for(int i = 1; i <= N; i++) {
s[i] = s[i - 1] ^ a[i];
insert(s[i]);
mx[i] = Query(s[i]);
mx[i] = max(mx[i - 1], mx[i]);
}
}
int main() {
//freopen("3.in", "r", stdin);
N = read();
for(int i = 1; i <= N; i++) a[i] = read();
solve(s, pmx);
reverse(a + 1, a + N + 1);
solve(s, smx);
reverse(smx + 1, smx + N + 1);
int ans = 0;
for(int i = 1; i <= N; i++) ans = max(ans, pmx[i] + smx[i + 1]);
cout << ans;
}

BZOJ4260: Codechef REBXOR (01Tire树)的更多相关文章

  1. 【BZOJ4260】Codechef REBXOR Trie树+贪心

    [BZOJ4260]Codechef REBXOR Description Input 输入数据的第一行包含一个整数N,表示数组中的元素个数. 第二行包含N个整数A1,A2,…,AN. Output ...

  2. [Bzoj4260]Codechef REBXOR(trie树)

    4260: Codechef REBXOR Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 1534  Solved: 669[Submit][Stat ...

  3. 【bzoj4260】Codechef REBXOR Trie树

    题目描述 输入 输入数据的第一行包含一个整数N,表示数组中的元素个数. 第二行包含N个整数A1,A2,…,AN. 输出 输出一行包含给定表达式可能的最大值. 样例输入 5 1 2 3 1 2 样例输出 ...

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

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

  5. 【bzoj4260】 Codechef REBXOR trie树

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

  6. BZOJ4260: Codechef REBXOR

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

  7. [BZOJ4260]Codechef REBXOR(Trie)

    Trie模板题.求出每个前缀和后缀的最大异或和区间,枚举断点就可.不知为何跑得飞快. #include<cstdio> #include<cstring> #include&l ...

  8. BZOJ4260 Codechef REBXOR(trie)

    用trie求出前缀最大区间异或和.后缀最大区间异或和即可.注意空间是nlog的. #include<iostream> #include<cstdio> #include< ...

  9. bzoj 4260 Codechef REBXOR——trie树

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4260 一段的异或和就是两个前缀的异或和.正反扫两边,用trie树算每个位置为左/右端点时最大 ...

随机推荐

  1. cenos云服务器搭建虚拟主机

    ---恢复内容开始--- vim基本操作 1.如果apache安装成为Linux的服务的话,可以用以下命令操作: service httpd start 启动 service httpd restar ...

  2. 【NOIP 2009】靶形数独

    题目描述 小城和小华都是热爱数学的好学生,最近,他们不约而同地迷上了数独游戏,好胜的他们想用数独来一比高低.但普通的数独对他们来说都过于简单了,于是他们向 Z 博士请教,Z 博士拿出了他最近发明的“靶 ...

  3. Arch下systemd无法开机执行rc.local之解决方法

    早就发现了,Arch的systemd提供的那个 rc-local.service 貌似有问题,rc.local不会执行.因为没用rc.local,一直没管. 解决方法源自这里,需要稍加改动: http ...

  4. Java基础笔记(十八)——多态

    多态表示同一个操作作用在不同对象时,会有不同的结果. 多态可分为编译时多态和运行时多态. 编译时多态:方法重载,编译时就可以确定到底调用哪个方法,可以被看做一个类中的方法多态性. 运行时多态:只有在运 ...

  5. virturalenv 虚拟环境

    一.window系统 1.virtualenv的使用 2.pycharm使用 环境变量,path的作用:命令行中执行的命令,他们的路径,必须在path路径中,如果命令行找不到该命令,就是说path没写 ...

  6. MYSQL常用命令笔记(一)

    1.show databases; 显示数据库 2.create database test; 创建数据库test 3.use test: 使用这个数据库 4.创建表class: create tab ...

  7. UVA1714 Keyboarding

    传送门 坑很多的一题 这里要感谢crk大佬提前帮我把所有的坑都踩了一遍...233 讲一下题目的意思: 给你一个神奇的 r*c 的键盘 (r,c<=50) 上面有大写的字母,数字,' - '号 ...

  8. hdu1430 魔板(康拓展开 bfs预处理)

    魔板 Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submiss ...

  9. flex布局基础

    一.Flex布局是什么? Flex 即:"弹性布局" 任何一个容器都可以指定为Flex布局 .box{ display:flex; } 行内元素也可以使用Flex布局 .box{ ...

  10. spark 2.X 疑难问题汇总

    当前spark任务都是运行在yarn上,所以不用启动长进程worker,也没有master的HA问题,所以主要的问题在任务执行层面. 作业故障分类故障主要分为版本,内存和权限三方面. - 各种版本不一 ...