【BZOJ4260】 Codechef REBXOR 可持久化Trie
看到异或就去想前缀和(⊙o⊙)
这个就是正反做一遍最大异或和更新答案
最大异或就是很经典的可持久化Trie,从高到低贪心
WA: val&(1<<(base-1))得到的并不直接是1/0
#include<bits/stdc++.h>
#define ll long long
#define N 400005
using namespace std;
inline int read(){
int x=,f=;char ch=getchar();
while(ch<''||ch>''){if(ch=='-')f=-;ch=getchar();}
while(ch>=''&&ch<=''){x=*x+ch-'';ch=getchar();}
return x*f;
}
int n,tot,a[N],rt[N],ch[N*][];
int ans,now,lmx[N],rmx[N];
void build(int &x,int base){
x=++tot;
if(base==-)return;
build(ch[x][],base-);
}
int getmx(int x,int base,int val){
if(!base)return ;
int t=val&(<<(base-));t?t=:t=;
if(ch[x][t]){return (<<(base-))+getmx(ch[x][t],base-,val);}
else return getmx(ch[x][t^],base-,val);
}
void add(int pre,int &x,int base,int val){
x=++tot;
ch[x][]=ch[pre][];ch[x][]=ch[pre][];
if(base==-)return;
int t=val&(<<(base-));t?t=:t=;
add(ch[pre][t],ch[x][t],base-,val);
}
int main(){
n=read();
for(int i=;i<=n;i++)a[i]=read();
now=;tot=;
build(rt[],);
for(int i=;i<=n;i++){
rt[i]=rt[i-];
now^=a[i];
lmx[i]=getmx(rt[i-],,now);
add(rt[i-],rt[i],,now);
}
for(int i=;i<=n;i++)lmx[i]=max(lmx[i],lmx[i-]);
now=;tot=;
memset(ch,,sizeof(ch));
build(rt[],);
for(int i=n;i;i--){
now^=a[i];
rmx[i]=getmx(rt[i+],,now);
add(rt[i+],rt[i],,now);
}
for(int i=n;i;i--)rmx[i]=max(rmx[i],rmx[i+]);
for(int i=;i<n;i++)ans=max(ans,lmx[i]+rmx[i+]);
printf("%d\n",ans);
}
4260: Codechef REBXOR
Time Limit: 10 Sec Memory Limit: 256 MB
Submit: 461 Solved: 206
[Submit][Status][Discuss]
Description

.jpg)
Input
Output
Sample Input
1 2 3 1 2
Sample Output
HINT
【BZOJ4260】 Codechef REBXOR 可持久化Trie的更多相关文章
- bzoj 4546: codechef XRQRS [可持久化Trie]
4546: codechef XRQRS 可持久化Trie codechef上过了,bzoj上蜜汁re,看别人说要开5.2e5才行. #include <iostream> #includ ...
- [Bzoj4260]Codechef REBXOR(trie树)
4260: Codechef REBXOR Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 1534 Solved: 669[Submit][Stat ...
- BZOJ4260 Codechef REBXOR 题解
题目大意: 有一个长度为n的序列,求1≤l1≤r1<l2≤r2≤n使得(⊕r1i=l1ai)+(⊕r2i=l2ai)最大,输出这个最大值. 思路: 用Trie求出前缀异或和以及后缀异或和,再求出 ...
- [BZOJ4260]Codechef REBXOR(Trie)
Trie模板题.求出每个前缀和后缀的最大异或和区间,枚举断点就可.不知为何跑得飞快. #include<cstdio> #include<cstring> #include&l ...
- BZOJ4260 Codechef REBXOR(trie)
用trie求出前缀最大区间异或和.后缀最大区间异或和即可.注意空间是nlog的. #include<iostream> #include<cstdio> #include< ...
- BZOJ4260: Codechef REBXOR
Description Input 输入数据的第一行包含一个整数N,表示数组中的元素个数. 第二行包含N个整数A1,A2,…,AN. Output 输出一行包含给定表达式可能的最大值. S ...
- BZOJ4260: Codechef REBXOR (01Tire树)
题意 题目链接 Sol 首先维护出前缀xor和后缀xor 对每个位置的元素插入到Trie树里面,每次找到和该前缀xor起来最大的元素 正反各做一遍,取最大. 记得要开log倍空间qwq.. #incl ...
- [BZOJ4260] Codechef REBXOR (01字典树,异或前缀和)
Description Input 输入数据的第一行包含一个整数N,表示数组中的元素个数. 第二行包含N个整数A1,A2,-,AN. Output 输出一行包含给定表达式可能的最大值. Sample ...
- 【BZOJ4260】Codechef REBXOR (Trie树)
[BZOJ4260]Codechef REBXOR (Trie树) 题面 BZOJ 题解 两眼题.第一眼不会做,第二眼好简单... 前缀异或和一下,拿\(Trie\)树维护求一个在这个端点以左的最大值 ...
随机推荐
- [LeetCode] Maximal Rectangle
Given a 2D binary matrix filled with 0's and 1's, find the largest rectangle containing all ones and ...
- Spring XML配置文件示例(一)——<Servlet name>-servlet.xml
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.sp ...
- 跟着鸟哥学Linux系列笔记2-第10章VIM学习
跟着鸟哥学Linux系列笔记0-扫盲之概念 跟着鸟哥学Linux系列笔记0-如何解决问题 跟着鸟哥学Linux系列笔记1 常用的文本编辑器:Emacs, pico, nano, joe, vim VI ...
- 在ASP.NET 5中如何方便的添加前端库
(此文章同时发表在本人微信公众号“dotNET每日精华文章”,欢迎右边二维码来关注.) 题记:ASP.NET 5和之前的ASP.NET版本有很大的不同,其中之一就是对前端库的管理不再使用Nuget,而 ...
- 获得H.264视频分辨率的方法
转自:http://www.cnblogs.com/likwo/p/3531241.html 在使用ffmpeg解码播放TS流的时候(例如之前写过的UDP组播流),在连接时往往需要耗费大量时间.经过d ...
- jquery中append()、prepend()、after()、before()的区别详解
append() - 在被选元素的结尾插入内容(内容的结尾,比如说有个a标签,则是在</a>这个标签之前添加东西) prepend() - 在被选元素的开头插入内容(内容的开始,比如说有个 ...
- Arduino101学习笔记(二)—— 一些注意的语法点
1.宏定义 2.整数常量 3.支持C++ String类 (1)String 方法 charAt() compareTo() concat() endsWith() equals() equalsIg ...
- Tomcat环境配置部署测试环境及架构
Tomcat环境配置已经在前面介绍过了,这边就为童鞋们介绍下对于Tomcat的架构是怎么样的! Tomcat的架构包含(bin.conf.lib.logs.temp.wenapps.work)等文件夹 ...
- express-11 表单处理(2)
处理AJAX表单 用Express处理AJAX表单非常简单:甚至可以使用相同的处理程序来处理AJAX请求和常规的浏览器回退. HTML文件 (/views/newsletter.handlebars) ...
- css -- 导航条
1.垂直导航条 HTML: <ul class="nav"> <li><a href="">Home</a>&l ...