最大异或和(xor)

题目描述

给定一个非负整数序列{a},初始长度为N。

有M个操作,有以下两种操作类型:

1、A x:添加操作,表示在序列末尾添加一个数x,序列的长度N+1。

2、Q l r x:询问操作,你需要找到一个位置p,满足l<=p<=r,使得:

a[p] xor a[p+1] xor ... xor a[N] xor x 最大,输出最大是多少。

输入

第一行包含两个整数N,M,含义如问题描述所示。

第二行包含N个非负整数,表示初始的序列A。

接下来M行,每行描述一个操作,格式如题面所述。

输出

假设询问操作有T个,则输出应该有T行,每行一个整数表示询问的答案。

样例输入

5 5
2 6 4 3 6
A 1
Q 3 5 4
A 4
Q 5 7 0
Q 3 6 6

样例输出

4
5
6

提示

本题共有10个测试点,每个测试点10分。

对于测试点1-2,N,M<=5。

对于测试点3-7,N,M<=80000。

对于测试点8-10,N,M<=300000。

其中测试点1, 3, 5, 7, 9保证没有修改操作。

对于100%的数据,0<=a[i]<=10^7。


solution

考虑异或满足前缀相减。

答案=1~an~x的异或和异或1~i的异或和

前一部分是定值。

后一部分,我们对于每一个前缀都加进trie树,在trie上贪心即可。

建议写递归写法,注意边界。

 #include<cstdio>
#include<iostream>
#include<cstdlib>
#include<cstring>
#include<algorithm>
#include<cmath>
using namespace std;
int n,m,rt[],now,cnt;
struct trie{
int ch[],v;
}tr[*];
void ins(int k,int la,int v){
for(int i=;i>=;i--){
tr[k].v=tr[la].v+;
bool t=((v&(<<i))>);
tr[k].ch[!t]=tr[la].ch[!t];
tr[k].ch[t]=++cnt;
k=tr[k].ch[t],la=tr[la].ch[t];
}
tr[k].v=tr[la].v+;
}
int ask(int k,int la,int v){
int ans=;
for(int i=;i>=;i--){
bool t=((v&(<<i))>);t=(!t);
int s1=tr[k].ch[t],s2=tr[la].ch[t];
if(tr[s1].v>tr[s2].v){
ans+=(<<i);k=s1;la=s2;
}
else{
k=tr[k].ch[!t],la=tr[la].ch[!t];
}
}
return ans;
}
int main()
{
cin>>n>>m;
for(int i=,t;i<=n;i++){
scanf("%d",&t);
rt[i]=++cnt;
now^=t;ins(rt[i],rt[i-],now);
}
int rn=n;
for(int i=,t,a,b;i<=m;i++){
char c;scanf(" %c",&c);
if(c=='A'){
scanf("%d",&t);rn++;rt[rn]=++cnt;
now^=t;ins(rt[rn],rt[rn-],now);
}
else {
scanf("%d%d%d",&a,&b,&t);t^=now;
if(b==)printf("%d\n",t);
else {
//cout<<rt[b-1]<<' '<<rt[a-2]<<endl;
printf("%d\n",ask(rt[b-],a->?rt[a-]:,t));
}
}
}
return ;
}

最大异或和(xor)的更多相关文章

  1. 异或链表(XOR linked list)

    异或链表(Xor Linked List)也是一种链式存储结构,它可以降低空间复杂度达到和双向链表一样目的,任何一个节点可以方便的访问它的前驱节点和后继结点.可以参阅wiki 普通的双向链表 clas ...

  2. 【机器学习】神经网络实现异或(XOR)

    注:在吴恩达老师讲的[机器学习]课程中,最开始介绍神经网络的应用时就介绍了含有一个隐藏层的神经网络可以解决异或问题,而这是单层神经网络(也叫感知机)做不到了,当时就觉得非常神奇,之后就一直打算自己实现 ...

  3. 【ShareCode】不错的技术文章 -- 如何使用异或(XOR)运算找到数组中缺失的数?

    如何使用异或(XOR)运算找到数组中缺失的数? 今天给大家分享一篇关于使用XOR(异或)运算找到数组中缺失的数的问题. 在一次Javascript面试中,有这么一个问题: 假设有一个由0到99(包含9 ...

  4. 关于异或(Xor)的一点笔记

    因为博弈论里,尤其实在求sg函数时,经常会用到异或运算,所以我就把网上搜到的一些相关知识和自己的一些理解记下来. 如果出现差错,还请指出,谢谢! 异或:可以简称Xor,可以用数学符号⊕表示,计算机就一 ...

  5. 异或值 xor

    题目描述 给出一个 N 个点的带权无向图,要求从 1 号点到 N 号点的一条路径,使得路径上的边 权异或值最大. 输入格式 第一行包含两个整数N和 M, 表示该无向图中点的数目与边的数目. 接下来M ...

  6. 如何理解“异或(XOR)”运算在计算机科学中的重要性?(转自-阿里聚安全)

    XOR加密是一种简单高效.非常安全的加密方法 一. XOR 运算 逻辑运算之中,除了 AND 和 OR,还有一种 XOR 运算,中文称为"异或运算". 它的定义是:两个值相同时,返 ...

  7. 如何通过php 使用异或(XOR)加密/解密文件

    laravel代码如下: /** * @param $q * @param $k * @return string 异或加解密 */ public function jiajiemi($q,$k){ ...

  8. Delphi 异或,英文为exclusive OR,或缩写成xor

    异或,英文为exclusive OR,或缩写成xor 异或(xor)是一个数学运算符.它应用于逻辑运算.异或的数学符号为“⊕”,计算机符号为“xor”.其运算法则为: a⊕b = (¬a ∧ b) ∨ ...

  9. 51nod 1295 XOR key-区间异或最大值-可持久化01Trie树(模板)

    1295 XOR key 2 秒 262,144 KB 160 分 6 级题   给出一个长度为N的正整数数组A,再给出Q个查询,每个查询包括3个数,L, R, X (L <= R).求A[L] ...

  10. 51Nod XOR key —— 区间最大异或值 可持久化字典树

    题目链接:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1295 1295 XOR key  题目来源: HackerRa ...

随机推荐

  1. 路由器基础配置之rip

    我们将以上面的拓扑图进行实验,用rip协议来进行实验,目的是实现三台不同网段的pc机之间实现互相通信 首先为pc机配置好ip地址和网关,配置完IP地址后在配置路由器 router1: enable 进 ...

  2. 记一次samba排错 Failed to start Samba SMB Daemon.

       记录一次服务出错排错的过程,很多新手出了点错不百度直接巴拉巴拉的问,一般老手根据经验可以给出一点建议,但是由于个体环境的差异并不适用,反而埋怨起来.这种真的无F**K可说,所以要培养自己的排错能 ...

  3. Shell学习——变量

    1.在Bash中,每一个变量的值都是字符串 2.查看某个进程的环境变量 cat /proc/$PID/environ | tr '\0' '\n' 3.变量赋值 3.1.var=value,注意var ...

  4. Scala构建元数据

    反射方式构建元数据: 通过反射来获取RDD中的Schema信息.这种方式适合于列名(元数据)已知的情况下 步骤: 1.SparkConf配置环境 2.SparkContext初始化上下文 3.SQLC ...

  5. CentOS网络设置 couldn't resolve host 'mirrorlist.centos.org问题解决

    在VMWare上安装好centos后,使用yum安装nodejs报错:can not resolve host 'mirritlist.centos.org', 百度上很多都说在/etc/resolv ...

  6. linux c scanf()小解

    今天学习了新的内容,关于c语言的scanf()函数. scanf()函数,读取指定格式的值赋值给相应变量.空格(‘ ‘),回车('\n'),TAB是分隔符,轻易不会被读取.还有,该函数的返回值是正确读 ...

  7. PHP.33-TP框架商城应用实例-后台9-商品相册-修改、删除(AJAX)

    商品相册图片删除 当商品删除时,把相册中的图片一并从硬盘和数据库中删除,根据商品id[因为每一张商品相片都会生成三张缩略图,所以删除时要将其缩略图一并删除] //钩子方法_before_delete: ...

  8. laravel5.5队列

    目录 简单实例 1. 简介和配置 1.1 好处 1.2 配置文件 1.3 队列驱动的必要配置 2. 创建任务 2.1 生成任务类 2.2 修改任务类 2.3 分发任务 2.4 自定义队列 & ...

  9. 如何使用malloc申请一个二位数组

    fscanf(file, "%d", &iVertexNum); // Read number of Vertices double **G = (double **)ma ...

  10. 《Cracking the Coding Interview》——第14章:Java——题目1

    2014-04-26 18:20 题目:从继承的角度,把构造函数设成private有什么意义? 解法:就不能继承了.单体模式里也这么干,目的是为了不让使用者自主生成对象,进行限制. 代码: // 14 ...