【参考博客】:

LOJ#10051」「一本通 2.3 例 3」Nikitosh 和异或(Trie

【题目链接】:

https://loj.ac/problem/10051

【题意】:

找出两个不相交区间的异或值相加。

【题解】:

这个题目还是挺有趣的,不是单纯地套模板了。

这个题目类似于 最大字段和问题。

首先我们可以预处理出所有的异或前缀和。

区间的异或值,就是两端点异或前缀和的异或值。

还需要处理出

L[t] = max{ Xor[i,j] }  1<= i,j <= t

R[t] = max{ Xor[i,j] }  t<= i,j <= n

分别代表两端点的异或最大值,
问题来了,怎么知道上面两个数组的值呢????
其实我们这里需要一点变通,我们其实求区间异或值,其实是两端点的异或前缀和。
如果我们把所有前缀和看成一些数,进行异或值最大化。不就回到最开始01字典树的应用吗???
不过我们还需要保留过程中的最大值。
即 L[i] = max{ L[i-1] , Insert_Xor(sum[i]) } 
可能插入了当前值,但还是达不到前面一点的最大值。所以需要处理一波。
上面的过程不久像极了最大字段和吗???
 
 
【代码】:
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int N = 4e5+;
const int M = 1e7+3e6; typedef long long ll;
int Son[M][];
int sum[N],Back[N];
int a[N],n,idx;
ll L[N],R[N]; void Insert(int x){
int p = ;
for(int i=;~i;i--){
int t = x >> i & ;
if( !Son[p][t] ) Son[p][t] = ++idx ;
p = Son[p][t];
}
} ll Query(int x){
int res = , p = ;
for(int i=;~i;i--){
int t = x >> i & ;
if( Son[p][t^] ){
res += <<i ;
p = Son[p][t^];
}else{
p = Son[p][t];
}
}
return res ;
} int main()
{
scanf("%d",&n);
for(int i=;i<=n;i++) scanf("%d",&a[i]); Insert();
for(int i=;i<=n;i++){
sum[i] = sum[i-] ^ a[i];
Insert(sum[i]);
L[i] = max( L[i-] , Query(sum[i]) );
} memset( Son , , sizeof Son );
idx = ; Insert();
for(int i=n;i;i--){
sum[i] = sum[i+] ^ a[i];
Insert(sum[i]);
R[i] = max( R[i+] , Query(sum[i]) ) ;
} ll ans = ;
for(int i=;i<=n;i++){
ans = max( ans , L[i]+R[i+] ) ;
}
/*
for(int i=1;i<=n;i++){
printf("%d , %lld\n",i,L[i]);
}
for(int i=n;i;i--){
printf("%d , %lld\n",i,R[i]);
}
*/
printf("%lld\n",ans);
return ;
}
 

【Trie】Nikitosh 和异或的更多相关文章

  1. 「LOJ#10051」「一本通 2.3 例 3」Nikitosh 和异或(Trie

    题目描述 原题来自:CODECHEF September Challenge 2015 REBXOR 1​​≤r​1​​<l​2​​≤r​2​​≤N,x⨁yx\bigoplus yx⨁y 表示 ...

  2. Nikitosh 和异或(trie树)

    题目: #10051. 「一本通 2.3 例 3」Nikitosh 和异或 解析: 首先我们知道一个性质\(x\oplus x=0\) 我们要求\[\bigoplus_{i = l}^ra_i\]的话 ...

  3. #10051 Nikitosh 和异或

    Nikitosh 和异或 其实题意已经简单的不能再简单了,所以就不讲了. 因为题目中 \(1\leq l_1 \leq r_1 <l_2 \leq r_2\leq N\),所以显然对于最终答案, ...

  4. Nikitosh 和异或 —— 一道 trie 树的题用可持久化 trie 水 然后翻车了...

    题意简介 题目就是叫你找两个不重合的非空区间,使得这两个区间里的数异或后相加的和最大 (看到异或,没错就决定是你了可持久化trie!) 思路 水一波字典树,莫名觉得这题可持久化能过,于是水了一发挂了, ...

  5. BZOJ4260,LOJ10051 Nikitosh 和异或

    题意 给定一个含 \(N\) 个元素的数组 \(A\),下标从 \(1\) 开始.请找出下面式子的最大值:\((A[l_1]\bigoplus A[l_1+1]\bigoplus -\bigoplus ...

  6. HDU 4825 Xor Sum (trie树处理异或)

    Xor Sum Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 132768/132768 K (Java/Others)Total S ...

  7. Educational Codeforces Round 12 E. Beautiful Subarrays trie求两异或值大于等于k对数

    E. Beautiful Subarrays   One day, ZS the Coder wrote down an array of integers a with elements a1,   ...

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

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

  9. Nikitosh 和异或

    题面 设 \(l_{i}\) 为以 \(i\) 为结尾的区间中最大的一段异或值,\(r_{i}\) 为以 \(i\) 为开头的区间中最大的一段异或值. 则有 \[l_{i}=\max\left(l[i ...

随机推荐

  1. vue的一些随笔

    一.点击路由后的样式,可以在路由文件index.js中设置 再在样式里面设置active的类名对应的样式. ———————————————————————————————————————————— 二 ...

  2. CF1208A

    CF1208A 题意: 就是把斐波那契数列的+改成异或,求第n项的值. 解法: 又是一个人类智慧题,打表找规律. 可以发现答案在 $ a,b,a⊕b $ 三个数中循环 CODE: #include&l ...

  3. 在树莓派4b上安装 ROS MELODIC 源码安装

    按照以下步骤照做就可以了,很简单的,就是浪费一点点时间罢了.也可以退而求其次,买个树莓派3B+来玩,哈哈. Step 1: Install Dependecies and Download the P ...

  4. Python 自学笔记(一)

    1.打印函数 1-1.print()函数 1-1-1.引号的用法 一.单引号与双引号:直接输出 二.三引号:保留原来的格式 1-2.转义字符 转义字符是一种特殊的字符常量,在编程语言中,我们用转义字符 ...

  5. 在windows平台下搭建Django项目虚拟环境

    参考文档:https://www.cnblogs.com/lovele-/p/8719126.html  https://blog.csdn.net/lwcaiCSDN/article/details ...

  6. C++内容记录

    仅个人记录 https://ke.qq.com/course/336509 M了个J - 博客园 https://www.cnblogs.com/mjios/

  7. 二、navicat连接本地数据库以及远程数据库

    本地连接 1.打开navicat 2.连接 最后点击确定就连接成功了: 远程数据库 和上面一样.....

  8. Http的请求协议请求行介绍

    请求协议包含的内容 请求行 GET /day04-tomcat/index.jsp HTTP/1.1 HTTP/1.1: 表示的是我们使用的是http协议的1.1版本 请求头 请求空行 请求体: 存储 ...

  9. post请求导出Excel表格

    axios.interceptors.response.use((response) =>{ if(response.config && response.config.resp ...

  10. 阶段5 3.微服务项目【学成在线】_day04 页面静态化_09-freemarker基础-内建函数

    可以理解为freemaker提供的一些函数和方法 controller里面记得把map的数据注释去掉,.放开代码 工程需要重启下 <br/> 学生的个数: ${stus?size} < ...