【bzoj4260】Codechef REBXOR Trie树
题目描述

.jpg)
输入
输出
样例输入
5
1 2 3 1 2
样例输出
6
题解
Trie树
还是本着100000(2)>011111(2)的原则,显然需要从高位贪心取值。
又因为x^x=0,所以有$a_l\oplus a_{l+1}\oplus \cdots\oplus a_{r-1}\oplus a_r=(a_1\oplus a_2\oplus\cdots\oplus a_{l-2}\oplus a_{l-1})\oplus(a_1\oplus a_2\oplus\cdots\oplus a_{r-1}\oplus a_{r})$
这样如果我们知道了r,就能够贪心求出最大的异或和。
所以我们可以从左往右将前缀异或和按位加入到Trie树中,并在每次添加后贪心求出最大的异或和,记为f[i],表示以i结尾的连续子序列的异或和的最大值。
然后再维护f[i]的前缀最大值,为1~i中所有连续子序列的异或和的最大值。
从右往左进行同样的操作,为i~n中所有连续子序列的异或和的最大值。
这样,我们枚举一个位置,它左边的最大值和它右边的最大值之和就是所求,求一下最大值即为答案。
#include <cstdio>
#include <algorithm>
#define N 400010
using namespace std;
struct data
{
int next[N * 30][2] , tot;
void insert(int v)
{
int x = 0 , i;
bool t;
for(i = 1 << 30 ; i ; i >>= 1)
{
t = v & i;
if(!next[x][t]) next[x][t] = ++tot;
x = next[x][t];
}
}
int query(int v)
{
int x = 0 , i , ret = 0;
bool t;
for(i = 1 << 30 ; i ; i >>= 1)
{
t = v & i;
if(next[x][t ^ 1]) ret += i , x = next[x][t ^ 1];
else x = next[x][t];
}
return ret;
}
}A , B;
int a[N] , m1[N] , m2[N];
int main()
{
int n , i , t , ans = 0;
scanf("%d" , &n);
for(i = 1 ; i <= n ; i ++ ) scanf("%d" , &a[i]);
A.insert(0) , B.insert(0);
for(t = 0 , i = 1 ; i <= n ; i ++ ) t ^= a[i] , A.insert(t) , m1[i] = max(m1[i - 1] , A.query(t));
for(t = 0 , i = n ; i >= 1 ; i -- ) t ^= a[i] , B.insert(t) , m2[i] = max(m2[i + 1] , B.query(t));
for(i = 1 ; i < n ; i ++ ) ans = max(ans , m1[i] + m2[i + 1]);
printf("%d\n" , ans);
return 0;
}
【bzoj4260】Codechef REBXOR Trie树的更多相关文章
- 【BZOJ4260】Codechef REBXOR Trie树+贪心
[BZOJ4260]Codechef REBXOR Description Input 输入数据的第一行包含一个整数N,表示数组中的元素个数. 第二行包含N个整数A1,A2,…,AN. Output ...
- BZOJ4260: Codechef REBXOR (01Tire树)
题意 题目链接 Sol 首先维护出前缀xor和后缀xor 对每个位置的元素插入到Trie树里面,每次找到和该前缀xor起来最大的元素 正反各做一遍,取最大. 记得要开log倍空间qwq.. #incl ...
- bzoj 4260 Codechef REBXOR——trie树
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4260 一段的异或和就是两个前缀的异或和.正反扫两边,用trie树算每个位置为左/右端点时最大 ...
- BZOJ 4260: Codechef REBXOR (trie树维护异或最大值)
题意 分析 将区间异或和转化为前缀异或和.那么[L,R][L,R][L,R]的异或和就等于presum[R] xor presum[L−1]presum[R]\ xor \ presum[L-1]pr ...
- 【bzoj4260】 Codechef REBXOR trie树
Input 输入数据的第一行包含一个整数N,表示数组中的元素个数. 第二行包含N个整数A1,A2,…,AN. Output 输出一行包含给定表达式可能的最大值. Sample Input ...
- [BZOJ4260]Codechef REBXOR(Trie)
Trie模板题.求出每个前缀和后缀的最大异或和区间,枚举断点就可.不知为何跑得飞快. #include<cstdio> #include<cstring> #include&l ...
- [Bzoj4260]Codechef REBXOR(trie树)
4260: Codechef REBXOR Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 1534 Solved: 669[Submit][Stat ...
- bzoj4260 REBXOR——Trie树
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4260 对于每个位置,求一个前缀最大值和后缀最大值: 也就是从1到 i 的异或和要找前面某处的 ...
- BZOJ 4260: Codechef REBXOR( trie )
求出前缀和, 那么以第x个元素结尾的最大异或值是max(sumx^sump)(1≤p<x), 用trie加速. 后缀同理, 然后扫一遍就OK了.时间复杂度O(31N) ------------- ...
随机推荐
- IE浏览器已经卸载,但是桌面上的图标却无法删除的解决方案
第一步——win+R运行[regedit],打开注册表. 第二步——在注册表里面依次找到HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVer ...
- 四、filter和find函数的区别
filter(): filter函数会返回data中为true那项的数组(即查询符合条件的数据) eg:data.filter((f)=>{ if(f[name]===item[name]){ ...
- python_90_hashlib模块
#用于加密相关的操作,3.x里代替了2.x中的md5模块和sha模块,主要提供 SHA1, SHA224, SHA256, SHA384, SHA512 ,MD5 算法 import hashlib ...
- 【转】 树莓派初次启动攻略for Mac
http://blog.csdn.net/rk2900/article/details/8632713/ 树莓派初次启动攻略for Mac made by Rk 感谢浙江大学<嵌入式系统> ...
- 解读express框架
#解读Express 框架 1. package.json文件:express工程的配置文件 2. 为什么可以执行npm start?相当于执行 node ./bin/www "script ...
- php面试相关
22.描述一下大流量高并发量网站的解决方案 答: 1.确认服务器硬件是否足够支持当前的流量. 2.使用memcache缓存技术,将动态数据缓存到内存中,动态网页直接调用这些文件,而不必在访问数据库. ...
- 配置Xcode的Device Orientation、AppIcon、LaunchImage
以下图片指出的 TARGETS→General 面板的信息. 下面我们讲讲根据 APP 需求配置我们的Xcode: 1.设置 Device Orientation,指定 APP 支持设备的方向 ,我们 ...
- 基础的Mapgis三维二次开发-插件式
最近在做一个杭州石油的项目开发一个小系统. 1.命令必须是 ICommand 的派生类 using System; using System.Collections.Generic; using Sy ...
- C语言程序运行
vs2013编辑器 c程序的运行 一.启动Microsoft Visual C++ 2013版.新建项目 . 1. 文件——> 新建——> 项目. 2. 确定之后 弹出 ...
- MySql常用数据操作
1.数据库操作: MySQL服务管理命令: 1.启动服务:sudo service mysql start 2.停止服务:sudo service mysql stop 3.重新启动服务:sudo s ...