4260: Codechef REBXOR


Time Limit: 10 Sec  Memory Limit: 256 MB
Submit: 1534  Solved: 669
[Submit][Status][Discuss]

Description


Input


输入数据的第一行包含一个整数N,表示数组中的元素个数。
第二行包含N个整数A1,A2,…,AN。
 
 

Output


输出一行包含给定表达式可能的最大值。
 

Sample Input


    

Sample Output



HINT


满足条件的(l1,r1,l2,r2)有:(1,2,3,3),(1,2,4,5),(3,3,4,5)。
对于100%的数据,2 ≤ N ≤ 4*105,0 ≤ Ai ≤ 109。

Source


By yts1999

分析:


用trie树处理出每个点作为右端点or左端点所能取到异或最大值,枚举分界点即可

复杂度O(n*30)
 
难道只有我做题的时候有点分不清左右还wa了一次吗,路痴QAQ
 

AC代码:


# include <iostream>
# include <cstdio>
# include <cstring>
# include <algorithm>
using namespace std;
const int N = 4e5 + ;
int ch[N * ][],dt,l[N],r[N],n,a[N],ret;
void clear(int x){ch[x][] = ch[x][] = ;}
void insert(int x)
{
int p = ,v;
for(int i = ;~i;i--)
{
v = x >> i & ;
if(!ch[p][v])ch[p][v] = ++dt,clear(dt);
p = ch[p][v];
}
}
void init(){dt = ;clear();insert();}
int find(int x)
{
int ret = ,v,p = ;
for(int i = ;~i;i--)
{
v = x >> i & ;
if(ch[p][v ^ ])
{
ret += ((v ^ ) << i);
p = ch[p][v ^ ];
}
else p = ch[p][v],ret += (v << i);
}
return ret ^ x;
} int main()
{
scanf("%d",&n);
for(int i = ;i <= n;i++)scanf("%d",&a[i]);
init();for(int i = ;i <= n;i++)r[i] = max(r[i - ],find(a[i])),insert(a[i]);
init();for(int i = n;i >= ;i--)l[i] = max(l[i + ],find(a[i])),insert(a[i]);
for(int i = ;i < n;i++)ret = max(ret,l[i] + r[i + ]);
printf("%d\n",ret);
}

[Bzoj4260]Codechef REBXOR(trie树)的更多相关文章

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

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

  2. 【bzoj4260】Codechef REBXOR Trie树

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

  3. BZOJ4260: Codechef REBXOR (01Tire树)

    题意 题目链接 Sol 首先维护出前缀xor和后缀xor 对每个位置的元素插入到Trie树里面,每次找到和该前缀xor起来最大的元素 正反各做一遍,取最大. 记得要开log倍空间qwq.. #incl ...

  4. bzoj 4260 Codechef REBXOR——trie树

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

  5. BZOJ 4260: Codechef REBXOR (trie树维护异或最大值)

    题意 分析 将区间异或和转化为前缀异或和.那么[L,R][L,R][L,R]的异或和就等于presum[R] xor presum[L−1]presum[R]\ xor \ presum[L-1]pr ...

  6. 【bzoj4260】 Codechef REBXOR trie树

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

  7. [BZOJ4260]Codechef REBXOR(Trie)

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

  8. bzoj4260 REBXOR——Trie树

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4260 对于每个位置,求一个前缀最大值和后缀最大值: 也就是从1到 i 的异或和要找前面某处的 ...

  9. BZOJ 4260: Codechef REBXOR( trie )

    求出前缀和, 那么以第x个元素结尾的最大异或值是max(sumx^sump)(1≤p<x), 用trie加速. 后缀同理, 然后扫一遍就OK了.时间复杂度O(31N) ------------- ...

随机推荐

  1. iOS UI异步更新:dispatch_async 与 dispatch_get_global_queue 的使用方法

    GCD (Grand Central Dispatch) 是Apple公司开发的一种技术,它旨在优化多核环境中的并发操作并取代传统多线程的编程模式. 在Mac OS X 10.6和IOS 4.0之后开 ...

  2. 字符串循环右移-c语言

    一个长度为len的字符串,对其循环右移n位 [期望]char str[] = "abcdefg";右移3次后,变成"efgabcd" [思路] 思路1. 如果用 ...

  3. python * urllib_urlopen( )

    python * urllib_urlopen( ) Python urllib 库提供了一个从指定的 URL 地址获取网页数据,然后对其进行分析处理,获取想要的数据. 一.urllib模块urlop ...

  4. PYTHON PIP和kivy安装教程

    我们安装pip.我们同样需要在Python的官网上去下载 下载地址:https://pypi.python.org/pypi/pip 下载完成之后,解压到一个文件夹,用CMD控制台进入解压目录,输入: ...

  5. 浅谈p值(p-value是什么)

    当我们说到p-value时,我们在说什么? “这个变量的p-value小于0.05,所以这个变量很重要” ........ 你真的知道自己在说什么么???这个p-value到底是个什么鬼?为什么小于0 ...

  6. MFC中EDIT控件实现换行

    \n是C下的回撤换行.在MFC下得用\r\n.

  7. MFC模态框关闭时出现断言报错!

    我尝试一个老的主对话框上创建另一个新的模态对话框并结束对话框,然后包含创建模态对话框的函数体执行结束时,我出现了这个断言失败! 原因:使用PostQuitMessage(1),导致出现上述问题:或者别 ...

  8. qcloudsms_py

    qcloudsms_py from qcloudsms_py import SmsVoicePromptSender from qcloudsms_py.httpclient import HTTPE ...

  9. JavaScript 非常重要的几个概念

    JavaScript是一门比较复杂的语言.如果你是一名JavaScript开发人员,不管处于什么样的水平,都有必要了解JavaScript的基本概念.小编最近的工作涉及到JavaScript,于是本文 ...

  10. TWaver可视化编辑器的前世今生(二)3D编辑器

    接着昨天的继续说哈. 作为一款高效.轻量.自带编辑功能小组件,TWaver Java在电信网管界一炮而红,在各大运营商的OSS,BSS,NMS系统中随处可见. 采用了TWaver图形组件的上海世博会监 ...