题目大意:有一串初始长度为$n$的序列$a$,有两种操作:

  1. $A\;x:$在序列末尾加一个数$x$
  2. $Q\;l\;r\;x:$找一个位置$p$,满足$l\leqslant p\leqslant r$,使得: $a_p\oplus a_{p+1}\oplus\dots\oplus a_n\oplus x$最大,输出最大是多少。

题解:把序列前缀和,变成$S$,就变成了在$[l-2,r-1]$区间内找一个数$S_p$,使得$S_p\oplus S_n\oplus x$最大。可持久化$trie$

卡点:

C++ Code:

#include <cstdio>
#include <iostream>
#define M 24
#define maxn 600010
#define N (maxn * (M + 1)) int n, m;
int __root__[maxn], *root = __root__ + 1, idx;
int nxt[N][2], V[N], sum;
void insert(int &rt, int x, int dep) {
nxt[++idx][0] = nxt[rt][0], nxt[idx][1] = nxt[rt][1], V[idx] = V[rt] + 1, rt = idx;
if (!~dep) return ;
int tmp = x >> dep & 1;
insert(nxt[rt][tmp], x, dep - 1);
}
int query(int x, int L, int R) {
int res = 0;
for (int i = M; ~i; i--) {
int tmp = x >> i & 1;
if (V[nxt[R][!tmp]] - V[nxt[L][!tmp]]) L = nxt[L][!tmp], R = nxt[R][!tmp], res |= 1 << i;
else L = nxt[L][tmp], R = nxt[R][tmp];
}
return res;
}
int main() {
std::ios::sync_with_stdio(false), std::cin.tie(0), std::cout.tie(0);
std::cin >> n >> m;
insert(root[0], 0, M);
for (int i = 1, x; i <= n; i++) {
std::cin >> x;
insert(root[i] = root[i - 1], sum ^= x, M);
}
while (m --> 0) {
char op;
int l, r, x;
std::cin >> op >> l;
if (op == 'A') {
root[n + 1] = root[n];
insert(root[++n], sum ^= l, M);
} else {
std::cin >> r >> x;
std::cout << query(x ^ sum, root[l - 2], root[r - 1]) << '\n';
}
}
return 0;
}

  

[洛谷P4735]最大异或和的更多相关文章

  1. Bzoj3261/洛谷P4735 最大异或和(可持久化Trie)

    题面 Bzoj 洛谷 题解 显然,如果让你查询整个数列的最大异或和,建一颗\(01Trie\),每给定一个\(p\),按照二进制后反方向跳就行了(比如当前二进制位为\(1\),则往\(0\)跳,反之亦 ...

  2. 洛谷 P4735 最大异或和 解题报告

    P4735 最大异或和 题目描述 给定一个非负整数序列\(\{a\}\),初始长度为\(N\). 有\(M\)个操作,有以下两种操作类型: A x:添加操作,表示在序列末尾添加一个数\(x\),序列的 ...

  3. 【题解】洛谷P4735最大异或和

    学习了一下可持久化trie的有关姿势~其实还挺好理解的,代码也短小精悍.重点在于查询某个历史版本的trie树上的某条边是否存在,同样我们转化到维护前缀和来实现.同可持久化线段树一样,我们为了节省空间继 ...

  4. 洛谷 P3359 改造异或树

    题目描述 给定一棵n 个点的树,每条边上都有一个权值.现在按顺序删掉所有的n-1条边,每删掉一条边询问当前有多少条路径满足路径上所有边权值异或和为0. 输入输出格式 输入格式: 第一行一个整数n. 接 ...

  5. 【洛谷P4735】最大异或和

    题目大意:给定一个长度为 N 的序列,支持两个操作:在序列末尾添加一个新的数字,查询序列区间 \([l,r]\) 内使得 \(a_p\oplus a_{q+1}\oplus ... a_N\oplus ...

  6. 【洛谷 P4735】 最大异或和 (可持久化Trie)

    题目链接 维护整个数列的异或前缀和和\(s\),然后每次就是要求\(s[N]\text{^}x\text{^}s[k],l-1<=k<=r-1\)的最大值 如果没有\(l\)的限制,那么直 ...

  7. 洛谷P4462 [CQOI2018]异或序列(莫队)

    题意 题目链接 Sol 一开始以为K每次都是给出的想了半天不会做. 然而发现读错题了维护个前缀异或和然后直接莫队搞就行,. #include<bits/stdc++.h> #define ...

  8. 【洛谷P3917】异或序列

    题目大意:给定一个长度为 N 的序列,每个位置有一个权值,求 \[\sum\limits_{1\le i\le j\le n}(a_i\oplus a_{i+1}...\oplus a_j)\] 的值 ...

  9. 【洛谷P4462】异或序列

    题目大意:给定一个长度为 N 的序列,有 M 组询问,每组询问查询区间 [l,r] 内异或和等于给定常数 K 的区间组数. 题解:对于异或和问题,一般先进行前缀和处理,转化为两个点的的关系.因此,经过 ...

随机推荐

  1. Python:pickle模块学习

    1. pickle模块的作用 将字典.列表.字符串等对象进行持久化,存储到磁盘上,方便以后使用 2. pickle对象串行化 pickle模块将任意一个python对象转换成一系统字节的这个操作过程叫 ...

  2. 《绝地求生大逃杀》BE错误怎么办 BE服务未正常运行及安装失败解决方法

    <绝地求生大逃杀>BattlEye Launcher是游戏的反作弊程序,也是启动过程中做容易出现错误的,今天小编带来“爆锤吧务”分享的<绝地求生大逃杀>BE服务未正常运行及安装 ...

  3. 关于 NPOI 导出的 Excel 出现“部分内容有问题” 的解决方法

    近期发现使用 NPOI 导出的 Excel 文件,有部分用户反映在打开时报错,测试了一下,发现在低版本的 Office 中(2003版,配合2007格式兼容包)打开正常,但在高版本 Office 中, ...

  4. 虚拟机克隆CentOs后网卡问题

    1.直接修改  /etc/sysconfig/network-scripts/ifcfg-eth0 删掉UUID HWADDR配置静态地址 2.修改配置文件vi /etc/udev/rules.d/7 ...

  5. C++ 基础面试题-1

    请说出下面代码在32位系统下的输出内容 /* ** 2018/03/21 21:43:00 ** Brief: ** Author:ZhangJianWei ** Email:Dream_Dog@16 ...

  6. Spring Cloud(十一):服务网关 Zuul(过滤器)【Finchley 版】

    Spring Cloud(十一):服务网关 Zuul(过滤器)[Finchley 版]  发表于 2018-04-23 |  更新于 2018-05-07 |  在上篇文章中我们了解了 Spring ...

  7. 搜索二维矩阵 II

    描述 写出一个高效的算法来搜索m×n矩阵中的值,返回这个值出现的次数. 这个矩阵具有以下特性: 每行中的整数从左到右是排序的. 每一列的整数从上到下是排序的. 在每一行或每一列中没有重复的整数. 样例 ...

  8. 记一次Log4j2日志无法输出的 心酸史

    问题描述:部分日志无法输出到日志文件中. 项目中的代码: @Resource private ConfigInfo configInfo; private static final Logger lo ...

  9. dotnetframe的清理工具

    微软的产品一向不敢恭维,卸载都没有办法卸载干净,卸载又慢又不彻底,dotnet被我卸载之后还有注册表残留以至于无法重新安装. .NET Framework Cleanup Tool真的很好用,全部版本 ...

  10. ArrayList与LinkedList的普通for循环遍历

    对于大部分Java程序员朋友们来说,可能平时使用得最多的List就是ArrayList,对于ArrayList的遍历,一般用如下写法: public static void main(String[] ...