Nikitosh 和异或

其实题意已经简单的不能再简单了,所以就不讲了。

因为题目中 \(1\leq l_1 \leq r_1 <l_2 \leq r_2\leq N\),所以显然对于最终答案,总有一个 \(x\) 满足 \(r_1\leq x<l_2\)。

那么就可以不断尝试以那个点为 \(x\),来求出答案,具体方法如下:

设 \(l_i=max_{1\leq l \leq r\leq i}\{a_l\bigoplus a_{l+1}\bigoplus..\bigoplus a_r\}\),\(r_i=max_{i\leq l\leq r\leq N}\{a_l\bigoplus a_{l+1}\bigoplus..\bigoplus a_r\}\)。

那么 \(ans=max_{1\leq i<N}\{l_i+r_{i+1}\}\),而关键在于怎么求 \(l_i,r_i\)。

这里引入一个概念:异或前缀和,即 \(S_i=a_0\bigoplus a_1\bigoplus a_2\bigoplus...\bigoplus a_i\)。(其中 \(a_0=0\))

那么 \(l_i=max_{1\leq j< i}\{S_i\bigoplus S_j\}\),\(r_i=max_{i< j\leq N}\{S'_i\bigoplus S'_j\}\)。(其中 \(S'_i=a_N\bigoplus a_{N-1}\bigoplus...\bigoplus a_i\))

然后就是简单的 trie 贪心求最大异或对了,但是还有几处细节要注意,都写在代码里了。

#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
#include <iostream>
#define N 9000010
using namespace std; int n, trie[N][2], l[N], r[N], a[N], tot = 0; int read() {
int x = 0, f = 1;
char c = getchar();
while (c < '0' || c > '9') f = (c == '-') ? -1 : 1, c = getchar();
while (c >= '0' && c <= '9') x = x * 10 + c - 48, c = getchar();
return x * f;
} void insert(int x) {
int p = 0;
for (int i = 31; i >= 0; i--) {
int ch = (x >> i) & 1;
if (!trie[p][ch])
trie[p][ch] = ++tot;
p = trie[p][ch];
}
return;
}//简单的模板式的插入。 int search(int x) {
int p = 0, ans = 0;
for (int i = 31; i >= 0; i--) {
int ch = (x >> i) & 1;
if (trie[p][ch ^ 1]) {
ans |= (1 << i);
p = trie[p][ch ^ 1];
} else
p = trie[p][ch];
}
return ans;
}
//简单的模板式的查询。
int main() {
n = read();
int s = 0;
insert(s);
for (int i = 1; i <= n; i++) {
a[i] = read();
s ^= a[i];//当前的异或前缀和。
insert(s);
l[i] = max(l[i - 1], search(s));//一定要取 max。
}
memset(trie, 0, sizeof(trie));
tot = 0;//记得清零。
insert(s);
for (int i = n; i >= 1; i--) {
s ^= a[i];
insert(s);
r[i] = max(r[i + 1], search(s));//同上。
}
int ans = 0;
for (int i = 1; i < n; i++) ans = max(ans, l[i] + r[i + 1]);
printf("%d\n", ans);
return 0;
}

#10051 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. 【Trie】Nikitosh 和异或

    [参考博客]: LOJ#10051」「一本通 2.3 例 3」Nikitosh 和异或(Trie [题目链接]: https://loj.ac/problem/10051 [题意]: 找出两个不相交区 ...

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

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

  5. BZOJ4260,LOJ10051 Nikitosh 和异或

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

  6. Nikitosh 和异或

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

  7. loj题目总览

    --DavidJing提供技术支持 现将今年7月份之前必须刷完的题目列举 完成度[23/34] [178/250] 第 1 章 贪心算法 √ [11/11] #10000 「一本通 1.1 例 1」活 ...

  8. [一本通学习笔记] 字典树与 0-1 Trie

    字典树中根到每个结点对应原串集合的一个前缀,这个前缀由路径上所有转移边对应的字母构成.我们可以对每个结点维护一些需要的信息,这样即可以去做很多事情. #10049. 「一本通 2.3 例 1」Phon ...

  9. Trie学习总结

    Trie树学习总结 字典树,又称前缀树,是用于快速处理字符串的问题,能做到快速查找到一些字符串上的信息. 另外,Trie树在实现高效的同时,会损耗更多的空间,所以Trie是一种以空间换时间的算法. T ...

随机推荐

  1. c++中 预编译头文件PCH

    转载:https://blog.csdn.net/lovemysea/article/details/74858430 一.预编译头文件使用经验: 如果预编译头文件被正确使用时,它确实大大提高我们编程 ...

  2. 记录编译JDK11源码时遇到的两个问题

    执行make all报错信息: 错误一 /src/hotspot/share/runtime/arguments.cpp:1461:35: error: result of comparison ag ...

  3. 这个网易云JS解密,老网抑云看了都直呼内行

    最近更新频率慢了,这不是因为CK3发售了嘛,一个字就是"肝".今天来看一下网易云音乐两个加密参数params和encSecKey,顺便抓取一波某歌单的粉丝,有入库哦,使用mysql ...

  4. AngularJS应用访问Android手机画廊

    下载angularjs.zip - 4.5 KB 介绍 本文演示了如何使用AngularJS调用Android应用程序公开的REST api来查看图库. 背景 Android和iOS都有相当多的远程访 ...

  5. 【Flutter Widgets大全】电子书开源

    [Flutter Widgets大全]是老孟耗费大量精力整理的,总共有330多个组件的详细用法,开源到Github上,希望可以帮助到大家,开源不易,点个赞可不可以. [Flutter Widgets ...

  6. git仓库之gitlab搭建使用

    一.简介 GitLab 是一个用于仓库管理系统的开源项目,使用git作为代码管理工具,并在此基础上搭建起来的web服务.类似github,常用在企业内部做git私有仓库使用: 二.gitlab安装 系 ...

  7. MySQL 日志详解

    一.MySQL 日志分类 MySQL 日志主要包含:错误日志.查询日志.慢查询日志.事务日志.二进制日志. 错误日志: -log-err (记录启动.运行.停止 MySQL 服务时出现的信息) 查询日 ...

  8. Springcloud技术分享

    Springcloud技术分享 Spring Cloud 是一套完整的微服务解决方案,基于 Spring Boot 框架,准确的说,它不是一个框架,而是一个大的容器,它将市面上较好的微服务框架集成进来 ...

  9. docker自定义网络里的dns实现原理

    简单说一下流程吧,不写了. docker会修改容器里的/etc/resolv.conf文件,把dns服务器设置成127.0.0.11,因为127.0.0.0/8地址都是本机回环地址,所以dns查询的时 ...

  10. MeteoInfoLab脚本示例:AMSR-E卫星数据投影

    AMSR-E(http://nsidc.org/data/amsre/index.html)数据中的Land3数据是HDF-EOS4格式,投影是Cylindrical_Equal_Area.这里示例读 ...