B4260 Codechef REBXOR
真是6块钱cpu(笑
踹树练习(汗
对于二进制异或和弹性,我们可以贪心的来做。
瓶颈在于快速贪心。
我们可以维护一个trie树,储存异或前缀和。每次在trie树上贪心的跑。
正向and反向跑一次,就可以了
#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
const int manx=4e+5;
int t[manx<<5][2],tail;
int l[manx],r[manx],a[manx];
void ins(int val)
{
int now=0;
for(int i=1<<30;i;i>>=1)
{
int c=(val&i) ? 1 : 0 ;
if(!t[now][c]) t[now][c]=++tail;
now=t[now][c];
}
return ;
}//插入
int find(int val)
{
int now=0,ans=0;
for(int i=1<<30;i;i>>=1)
{
int c=(val&i) ? 1 : 0;
if(t[now][c^1]) now=t[now][c^1],ans+=i;//每次根据二进制位,贪心的选择路径
else now=t[now][c];
}
return ans;
}
int main()
{
int n;
scanf("%d",&n);
int now=0;ins(0);
for(int i=1;i<=n;i++)
{
scanf("%d",&a[i]);
now^=a[i];
ins(now);
l[i]=max(l[i-1],find(now));
}//正向扫一遍
memset(t,0,sizeof(t));now=0,tail=0;ins(0);
for(int i=n;i>=1;i--)
{
now^=a[i];
ins(now);
r[i]=max(r[i+1],find(now));//反向和一遍
}
int ans=-0x7fffffff;
for(int i=1;i<=n;i++)
ans=max(l[i]+r[i+1],ans);//这里我们只需要保证不香蕉就可以了(汗
printf("%d",ans);
}
B4260 Codechef REBXOR的更多相关文章
- 【BZOJ4260】 Codechef REBXOR 可持久化Trie
看到异或就去想前缀和(⊙o⊙) 这个就是正反做一遍最大异或和更新答案 最大异或就是很经典的可持久化Trie,从高到低贪心 WA: val&(1<<(base-1))得到的并不直接是 ...
- BZOJ 4260: Codechef REBXOR( trie )
求出前缀和, 那么以第x个元素结尾的最大异或值是max(sumx^sump)(1≤p<x), 用trie加速. 后缀同理, 然后扫一遍就OK了.时间复杂度O(31N) ------------- ...
- bzoj 4260: Codechef REBXOR (01 Trie)
链接: https://www.lydsy.com/JudgeOnline/problem.php?id=4260 题面: 4260: Codechef REBXOR Time Limit: 10 S ...
- 【BZOJ4260】Codechef REBXOR (Trie树)
[BZOJ4260]Codechef REBXOR (Trie树) 题面 BZOJ 题解 两眼题.第一眼不会做,第二眼好简单... 前缀异或和一下,拿\(Trie\)树维护求一个在这个端点以左的最大值 ...
- 【BZOJ】4260: Codechef REBXOR【Trie树】【前后缀异或最大】
4260: Codechef REBXOR Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 2218 Solved: 962[Submit][Stat ...
- 【BZOJ4260】Codechef REBXOR Trie树+贪心
[BZOJ4260]Codechef REBXOR Description Input 输入数据的第一行包含一个整数N,表示数组中的元素个数. 第二行包含N个整数A1,A2,…,AN. Output ...
- [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
Description Input 输入数据的第一行包含一个整数N,表示数组中的元素个数. 第二行包含N个整数A1,A2,…,AN. Output 输出一行包含给定表达式可能的最大值. S ...
随机推荐
- Vue.js-----轻量高效的MVVM框架(九、组件利用Props传递数据)
#使用props传递数据 html:传递普通的字符串 <h3>#使用props传递数据</h3> <div id="dr01"> <div ...
- 研磨设计模式学习笔记1--简单工厂(SimpleFactory)
需求:实现一个简单工厂,客户端根据需求获取实现类. 简单工厂优点: 客户端不需要知道工厂内部实现,然组件外部实现面向接口编程. 客户端.实现类解耦. 一.接口及实现类 //接口 public inte ...
- Java Jdk 环境配置和测试
测试jdk:1.6 安装完jdk1.6以后,在我的电脑中找到环境变量配置 在系统变量的Path 中输入 ;E:\Program Files (x86)\Java\jdk1.6.0_01\bin(路径根 ...
- 几种常见的排序算法Java实现总结
public class MySort { final int MAX=20; int num[]=new int[MAX]; { System.out.print("生成的随机数组是:&q ...
- (转)Linux命令:使用dig,nslookup命令解析域名
Linux命令:使用dig命令解析域名 Linux下解析域名除了使用nslookup之外,开可以使用dig命令来解析域名,dig命令可以得到更多的域名信息. dig的全称是 (domain infor ...
- 小萝卜控机大师录制脚本(手机app自动化)
手机自动化测试 之前发布过小萝贝控机大师与按键精灵结合实现手机自动化测试的功能,小萝贝控机大师升级了实现了更多手机自动化测试的功能,如下: l 手机功能自动化测试:录制脚本,检查点时点击小萝贝控机大师 ...
- go语言初始化内部结构体3中方式
package main import ( "fmt" ) type User struct { Id int Name string Age int } type Manger ...
- 连接虚机中的mysql服务
1:修改mysql库中的user表的root用户的host值为% 2:授权:在mysql命令中执行 GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFI ...
- 实现Nginx中使用PHP-FPM时记录PHP错误日志的配置方法
最近在本地搭建的LNMP的开发环境.为了开发的时候不影响前端的正常开发就屏蔽的PHP里面php.ini中的一些错误提示.但是这样一来,就影响到了后端开发的一些问题比如不能及时调试开发中的一些问题 ng ...
- HIbernate基于外键的查询
此文以个人开发记录为目的,笔拙勿喷 项目是背景是公司的E签宝平台VIP频道项目进行关联账户增加后,需要做删除时的,联合查询 当前主要表结构账户表Account. CREATE TABLE `accou ...