【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】最大异或和的更多相关文章

  1. Android数据加密之异或加密算法

    前言: 这几天被公司临时拉到去做Android IM即时通信协议实现,大致看了下他们定的协议,由于之前没有参与,据说因服务器性能限制,只达成非明文传递,具体原因我不太清楚,不过这里用的加密方式是采用异 ...

  2. Oracle数据库异机升级

    环境: A机:RHEL5.5 + Oracle 10.2.0.4 B机:RHEL5.5 需求: A机10.2.0.4数据库,在B机升级到11.2.0.4,应用最新PSU补丁程序. 目录: 一. 确认是 ...

  3. [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 ...

  4. [PHP][位转换积累]之异或运算的简单加密应用

    异或的符号是^.按位异或运算, 对等长二进制模式按位或二进制数的每一位执行逻辑按位异或操作. 操作的结果是如果某位不同则该位为1, 否则该位为0. xor运算的逆运算是它本身,也就是说两次异或同一个数 ...

  5. Poj The xor-longest Path 经典题 Trie求n个数中任意两个异或最大值

    Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 5646   Accepted: 1226 Description In an ...

  6. RMAN异机恢复遭遇ORA-01547、ORA-01152、ORA-01110错误案例

    测试环境:     操作系统  :  Red Hat Enterprise Linux ES release 4 (Nahant Update 4)   VMWARE     数据库     :  O ...

  7. RAC异机恢复

    RAC异机恢复PDCL到PFCL: PNCL:RAC+ASM ,product env   db name:PNCL   instance:PDCL1 PDCL2 PFCL:RAC+ASM ,perf ...

  8. BZOJ 3261: 最大异或和

    Description 一个序列,支持两个操作. 1.在序列尾加入一个数. 2.询问 [l,r] 中与 x 异或值最大的数. \(n\leqslant 3*10^5\) Sol 可持久化 Trie 树 ...

  9. 异或之(bzoj 3689)

    Description 给定n个非负整数A[1], A[2], --, A[n].对于每对(i, j)满足1 <= i < j <= n,得到一个新的数A[i] xor A[j],这 ...

随机推荐

  1. navicat远程连接mysql,2003 can't connect to mysql server on 10038

    转载地址:https://blog.csdn.net/f12105212/article/details/70768516 1:我们连接远程服务器的mysql,如果出现问题,很大问题会出在服务器的端口 ...

  2. 可变对象(immutable)和不可变对象(mutable)

    可变对象(immutable)和不可变对象(mutable) 这个是之前一直忽略的一个知识点,比方说说起String为什么是一个不可变对象,只知道因为它是被final修饰的所以不可变,而没有抓住不可变 ...

  3. codeforces Flipping Game 题解

    版权声明:本文作者靖心,靖空间地址:http://blog.csdn.net/kenden23/.未经本作者同意不得转载. https://blog.csdn.net/kenden23/article ...

  4. Android中跑马灯效果

    <com.randy.test1.self.MarqueeText android:id="@+id/btn1" android:layout_width="mat ...

  5. LAMP的简介

    **********************补2016年5月23日的博客************************* LAMP--------Linux  Apache  MySQL  PHP ...

  6. Entity Framework——读写分离

    1 实现 CustomDbContext扩展了DbContext,其构造函数带有形式参nameOrConnectionString,可以在使用CustomDbContext时指定数据库连接字符串. D ...

  7. Vue 问题记录

    Vue 问题记录 汇总日常开发中遇到的关于vue的问题 VeeValidator 语言设置 校验消息默认是英文的,定义中文或其他语言的错误提示消息 import VeeValidate from 'v ...

  8. 友盟分享——Android App接入微信开放平台注意事项

    一.Android第三方应用接入微信开放平台的注意事项: 1. 到微信开放平台官网申请正式的AppID(需通过审核),要填写包名.app签名的md5值.至于如何获取app签名信息,官方提供签名包apk ...

  9. STM32F10X固件库函数——串口清状态位函数分析

    STM32F10X固件库函数——串口清状态位函数分析 最近在测试串口热插拔功能的时候,意外发现STM32F10X的串口库函数中,清理串口状态位函数稍稍有点不解.下面是改函数的源码: /******** ...

  10. H5基本标签