【LG4735】最大异或和
【LG4735】最大异或和
题意
题解
维护一个前缀异或和\(S_i\)
对于一个询问操作\(l\)、\(r\)、\(x\)
就是等价于求一个位置\(p\)(\(l\leq p \leq r)\)使得\(S_nxorS_{p-1}xorx\)最大
可将此问题转化为求\(p\)使\(S_{p-1}\) \(xor\) \(S_n xor x\)最大
先将后半部分求出然后在可持久化\(trie\)上贪心即可
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<cmath>
#include<algorithm>
using namespace std;
inline int gi() {
register int data = 0, w = 1;
register char ch = 0;
while (!isdigit(ch) && ch != '-') ch = getchar();
if (ch == '-') w = -1, ch = getchar();
while (isdigit(ch)) data = 10 * data + ch - '0', ch = getchar();
return w * data;
}
const int MAX_N = 600005;
struct Trie {int ch[2], latest; } t[MAX_N * 24];
int s[MAX_N], rt[MAX_N], N, M, tot;
void insert(int i, int k, int p, int q) {
if (k < 0) return (void)(t[q].latest = i);
int c = s[i] >> k & 1;
if (p) t[q].ch[c ^ 1] = t[p].ch[c ^ 1];
t[q].ch[c] = ++tot;
insert(i, k - 1, t[p].ch[c], t[q].ch[c]);
t[q].latest = max(t[t[q].ch[0]].latest, t[t[q].ch[1]].latest);
}
int query(int o, int val, int k, int limit) {
if (k < 0) return s[t[o].latest] ^ val;
int c = val >> k & 1;
if (t[t[o].ch[c ^ 1]].latest >= limit) return query(t[o].ch[c ^ 1], val, k - 1, limit);
else return query(t[o].ch[c], val, k - 1, limit);
}
int main () {
N = gi(), M = gi();
t[0].latest = -1;
rt[0] = ++tot;
insert(0, 23, 0, rt[0]);
for (int i = 1; i <= N; i++) {
int x = gi();
s[i] = s[i - 1] ^ x;
rt[i] = ++tot;
insert(i, 23, rt[i - 1], rt[i]);
}
for (int i = 1; i <= M; i++) {
char ch[5]; scanf("%s", ch);
if (ch[0] == 'A') {
int x = gi();
rt[++N] = ++tot;
s[N] = s[N - 1] ^ x;
insert(N, 23, rt[N - 1], rt[N]);
} else {
int l = gi(), r = gi(), x = gi();
printf("%d\n", query(rt[r - 1], x ^ s[N], 23, l - 1));
}
}
return 0;
}
【LG4735】最大异或和的更多相关文章
- Android数据加密之异或加密算法
前言: 这几天被公司临时拉到去做Android IM即时通信协议实现,大致看了下他们定的协议,由于之前没有参与,据说因服务器性能限制,只达成非明文传递,具体原因我不太清楚,不过这里用的加密方式是采用异 ...
- Oracle数据库异机升级
环境: A机:RHEL5.5 + Oracle 10.2.0.4 B机:RHEL5.5 需求: A机10.2.0.4数据库,在B机升级到11.2.0.4,应用最新PSU补丁程序. 目录: 一. 确认是 ...
- [LeetCode] Maximum XOR of Two Numbers in an Array 数组中异或值最大的两个数字
Given a non-empty array of numbers, a0, a1, a2, … , an-1, where 0 ≤ ai < 231. Find the maximum re ...
- [PHP][位转换积累]之异或运算的简单加密应用
异或的符号是^.按位异或运算, 对等长二进制模式按位或二进制数的每一位执行逻辑按位异或操作. 操作的结果是如果某位不同则该位为1, 否则该位为0. xor运算的逆运算是它本身,也就是说两次异或同一个数 ...
- Poj The xor-longest Path 经典题 Trie求n个数中任意两个异或最大值
Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 5646 Accepted: 1226 Description In an ...
- RMAN异机恢复遭遇ORA-01547、ORA-01152、ORA-01110错误案例
测试环境: 操作系统 : Red Hat Enterprise Linux ES release 4 (Nahant Update 4) VMWARE 数据库 : O ...
- RAC异机恢复
RAC异机恢复PDCL到PFCL: PNCL:RAC+ASM ,product env db name:PNCL instance:PDCL1 PDCL2 PFCL:RAC+ASM ,perf ...
- BZOJ 3261: 最大异或和
Description 一个序列,支持两个操作. 1.在序列尾加入一个数. 2.询问 [l,r] 中与 x 异或值最大的数. \(n\leqslant 3*10^5\) Sol 可持久化 Trie 树 ...
- 异或之(bzoj 3689)
Description 给定n个非负整数A[1], A[2], --, A[n].对于每对(i, j)满足1 <= i < j <= n,得到一个新的数A[i] xor A[j],这 ...
随机推荐
- vs中ctrl+w选中智能感应的整个单词
vs中ctrl+w选中智能感应的整个单词
- 【转】python通过文件头判断文件类型
刚刚看到一个好玩的程序,拉过来.原文地址:https://www.ttlsa.com/python/determine-file-type-by-the-file-header/ 侵权删. ===== ...
- 关于Ftp服务器
步骤/方法 首先在本地机器上创建一个用户!这些用户是用来登录到FTP的!我的电脑右键->管理->本地用户和组->用户->“右键”新建用户->输入用户名和密码再点创建就行了 ...
- 如何调试在OJ中的代码
在OJ上的原始程序: class Solution { public: ) return; ; ; while(*str != '\0'){ if(*str == ' '){ blank++; len ...
- [转]JOGL安装
本章介绍了设置环境以使用JOGL使用不同的集成开发环境(IDE),在您的系统上. 安装JOGL 对于JOGL安装,需要有以下系统要求: 系统要求 第一个要求是要在机器上安装Java Developme ...
- maven学习利用Profile构建不同环境的部署包
项目开发好以后,通常要在多个环境部署,象我们公司多达5种环境:本机环境(local).(开发小组内自测的)开发环境(dev).(提供给测试团队的)测试环境(test).预发布环境(pre).正式生产环 ...
- 【转】优秀的Java程序员必须了解GC的工作原理
一个优秀的Java程序员必须了解GC的工作原理.如何优化GC的性能.如何与GC进行有限的交互,因为有一些应用程序对性能要求较高,例如嵌入式系统.实时系统等,只有全面提升内存的管理效率 ,才能提高整个应 ...
- HDU 2031 进制转换(10进制转R进制)
传送门: http://acm.hdu.edu.cn/showproblem.php?pid=2031 进制转换 Time Limit: 2000/1000 MS (Java/Others) M ...
- Python 学习笔记(九)Python元组和字典(二)
什么是字典 字典是另一种可变容器模型,且可存储任意类型对象. 字典的每个键值 key=>value 对用冒号 : 分割,每个键值对之间用逗号 , 分割,整个字典包括在花括号 {} 中 键必须是唯 ...
- 06 hash join (Oracle里的哈希连接原理)
hash join (Oracle里的哈希连接原理) 2015年09月25日 17:00:28 阅读数:2188 哈希连接(HASH JOIN)是一种两个表在做表连接时主要依靠哈希运算来得到连接结果集 ...