【BZOJ4260】Codechef REBXOR (Trie树)
【BZOJ4260】Codechef REBXOR (Trie树)
题面
题解
两眼题。第一眼不会做,第二眼好简单。。。
前缀异或和一下,拿\(Trie\)树维护求一个在这个端点以左的最大值,右侧同理,取个最大值即可。
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
#define MAX 400400
inline int read()
{
int x=0;bool t=false;char ch=getchar();
while((ch<'0'||ch>'9')&&ch!='-')ch=getchar();
if(ch=='-')t=true,ch=getchar();
while(ch<='9'&&ch>='0')x=x*10+ch-48,ch=getchar();
return t?-x:x;
}
struct Node{int c[2];}t[MAX<<5];
int tot;
void insert(int &x,int p,int w)
{
if(!x)x=++tot;if(w==-1)return;
insert(t[x].c[(bool)(p&(1<<w))],p,w-1);
}
int Query(int x,int p,int w)
{
if(w==-1)return 0;int c=(bool)(p&(1<<w));
if(t[x].c[c^1])return Query(t[x].c[c^1],p,w-1)|(1<<w);
else return Query(t[x].c[c],p,w-1);
}
int n,ans,a[MAX],s[MAX],l[MAX],r[MAX],rt;
int main()
{
n=read();
for(int i=1;i<=n;++i)a[i]=read();
for(int i=1;i<=n;++i)s[i]=s[i-1]^a[i];
insert(rt,0,30);
for(int i=1;i<=n;++i)
{
l[i]=max(l[i-1],Query(rt,s[i],30));
insert(rt,s[i],30);
}
memset(t,0,sizeof(t));rt=0;
for(int i=n;i;--i)s[i]=s[i+1]^a[i];
insert(rt,0,30);
for(int i=n;i>=1;--i)
{
r[i]=max(r[i+1],Query(rt,s[i],30));
insert(rt,s[i],30);
}
for(int i=1;i<=n;++i)ans=max(ans,l[i]+r[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 Trie树
题目描述 输入 输入数据的第一行包含一个整数N,表示数组中的元素个数. 第二行包含N个整数A1,A2,…,AN. 输出 输出一行包含给定表达式可能的最大值. 样例输入 5 1 2 3 1 2 样例输出 ...
- 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) ------------- ...
随机推荐
- [Dynamics 365] 关于Currency的一点随笔
在Dynamics CRM中,如果我们要添加一条Currency记录的话. 可选择的Currency Type有<System> ,<Custorm>两种. 如果选择的是< ...
- 20155333 《网络对抗》 Exp6 信息搜集与漏洞扫描
20155333 <网络对抗> Exp6 信息搜集与漏洞扫描 基础问题 哪些组织负责DNS,IP的管理? 全球根服务器均由美国政府授权的ICANN统一管理,负责全球的域名根服务器.DNS和 ...
- idea java方法中 传多个参数对象 的复制粘贴快速处理方法
比如像这种的传多个参数对象,我是直接复制过来,然后把第一个字母改成大写,然后后面的实例对象敲一个第一个字符的小写,回车就直接出来了 在写调用参数的地方,ctrl+p 调出提示,然后按下提示里的实例的第 ...
- linux中wget的使用方法介绍
wget是在Linux下开发的开放源代码的软件,作者是Hrvoje Niksic,后来被移植到包括Windows在内的各个平台上.它有以下功能和特点:(1)支持断点下传功能:这一点,也是网络蚂蚁和Fl ...
- H5——video百花齐放(浏览器自带的播放器)
前言 手机自带浏览器的H5播放器 真是百花齐放啊(各个手机厂家有各个厂家的控件UI) 需求 手机浏览器木有控件条 自动播放 全屏处理 监控进度条 快进后退 自动播放 自动播放就给跪了 ios 安卓 为 ...
- REST-framework快速构建API--认证
一.API使用流程 使用过API的同学都知道,我们不可能任意调用人家的API,因为通过API可以获取很多关键数据,而且这个API可能供多个部门或个人使用,所以必须是经过授权的用户才能调用. API的使 ...
- debug 在windows下的使用
debug是什么? debug是一款windows和DOS系统下的一款软件,其最早可追溯到1937年的"马克1号"(具体度娘):早期debug主要在DOS和windows系统中,它 ...
- 为什么说LAXCUS颠覆了我的大数据使用体验
切入正题前,先做个自我介绍. 本人是从业三年的大数据小码农一枚,在帝都一家有点名气的广告公司工作,同时兼着大数据管理员的职责. 平时主要的工作是配合业务部门,做各种广告大数据计算分析工作,然后制成各种 ...
- Vigenere加密
Vigenere加密法原理很简单,实现起来也不难.与普通的单码加密法不同,明文经过加密之后,每个字母出现的频率就不会有高峰和低峰. 密钥中字母代表行和明文中的字母代表行.在vigenere表中找到对应 ...
- Linux内核分析:完成一个简单的时间片轮转多道程序内核代码
PS.贺邦 原创作品转载请注明出处 <Linux内核分析>MOOC课程 http://mooc.study.163.com/course/USTC-1000029000 1.m ...