题目链接

题目描述

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

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

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

Q l r x:询问操作,你需要找到一个位置p,满足l≤p≤r,使得: a[p]⊕a[p+1]⊕...⊕a[N]⊕x 最大,输出最大是多少。

输入输出格式

输入格式:

第一行包含两个整数N,M,含义如问题描述所示。
第二行包含 N个非负整数,表示初始的序列A 。
接下来 M行,每行描述一个操作,格式如题面所述。

输出格式:

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

输入输出样例

输入样例#1:

5  5
2 6 4 3 6
A 1
Q 3 5 4
A 4
Q 5 7 0
Q 3 6 6
输出样例#1:

4
5
6
关于这道题思路就不再多说,主要讲一下细节问题。
 #include<iostream>
#include<string>
#include<cstdio>
#include<cmath>
#include<cstring>
#include<map>
#include<algorithm>
#include<stack>
#include<queue>
#include<vector>
#define maxn 600005
using namespace std; inline int read()
{
int x=,res=;
char c=getchar();
while(c<''||c>'')
{
if(c=='-')
x=-;
c=getchar();
}
while(c>=''&&c<='')
{
res=res*+(c-'');
c=getchar();
}
return res*x;
} int n,m,tot,aa;
int last[maxn*],root[maxn],s[maxn];
int tree[maxn*][]; void trie(int i,int k,int l,int r)
{
if(k<)
{
last[r]=i;
return;
}
int c=(s[i]>>k)&;
if(l) tree[r][c^]=tree[l][c^];
tree[r][c]=++tot;
trie(i,k-,tree[l][c],tree[r][c]);
last[r]=max(last[tree[r][]],last[tree[r][]]);
} int ask(int now,int val,int k,int l)
{
if(k<) return val^s[last[now]];
int c=val>>k&;
if(last[tree[now][c^]]>=l)/*如果以这个点为根的子树上的结点的最大编号
大于等于l,那么这个结点就有意义,否则,这个结点就没有任何意义*/
{
return ask(tree[now][c^],val,k-,l);
}
else
{
return ask(tree[now][c],val,k-,l);
}
} int main()
{
n=read();m=read();
last[]=-;/*0号点其实就是trie树上不存在的点,之所以清为负数而不是
0,这是因为如果询问的区间的l是1,那么根据我们会把所有last的值>=0(l-1)
的数计算进去,这样如果不清为负数,那么trie树上没有的点我们也会错误的
计算进去,所以last一定要清为负数。
*/
root[]=++tot;/*这个根节点标记为1是为了和不在trie树上的点区分开 */
trie(,,,);//先构造一个全0的trie树
for(int i=;i<=n;i++)
{
aa=read();
s[i]=s[i-]^aa;
root[i]=++tot;
trie(i,,root[i-],root[i]);
}
for(int i=;i<=m;i++)
{
char c;
scanf("%s",&c);
if(c=='A')
{
aa=read();
root[++n]=++tot;
s[n]=s[n-]^aa;
trie(n,,root[n-],root[n]);
}
else
{
int l,r,x;
l=read();r=read();x=read();
printf("%d\n",ask(root[r-],s[n]^x,,l-));
}
}
}

P4735 最大异或和的更多相关文章

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

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

  2. luogu P4735 最大异或和

    嘟嘟嘟 省选竟然考了一个可持久化trie,就挑着我不会的考. 话说考场上我确实写了一个trie的做法,只不过一直没调出来然后就只剩暴力分了. 现在想想实在是太蠢了,明明对算法没有把握,却头脑一热在这题 ...

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

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

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

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

  5. 可持久化+Trie || BZOJ 3261最大异或和 || Luogu P4735 最大异或和

    题面:最大异或和 代码: #include<cstdio> #include<cstring> #include<iostream> using namespace ...

  6. P4735 最大异或和 01 Trie

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

  7. [洛谷P4735]最大异或和

    题目大意:有一串初始长度为$n$的序列$a$,有两种操作: $A\;x:$在序列末尾加一个数$x$ $Q\;l\;r\;x:$找一个位置$p$,满足$l\leqslant p\leqslant r$, ...

  8. P4735 最大异或和 /【模板】可持久化Trie

    //tire的可持久化 //线段树的可持久化——主席树 //可持久化的前提:本身的拓扑结构在操作时不变 //可以存下来数据结构的所有历史版本 //核心思想:只记录每一个版本与前一个版本不一样的地方 / ...

  9. Trie树入门

    Trie树入门 貌似很多人会认为\(Trie\)是字符串类型,但是这是数据结构!!!. 详情见度娘 下面开始进入正题. PS:本文章所有代码未经编译,有错误还请大家指出. 引入 先来看一个问题 ​ 给 ...

随机推荐

  1. Java 创建一个简单的验证码图片

    代码如下: package lixin.gan.test; import java.awt.Color; import java.awt.Font; import java.awt.Graphics2 ...

  2. 在Linux上安装ant环境

    原文链接:http://www.cnblogs.com/sell/archive/2013/07/24/3210198.html 1.从http://ant.apache.org 上下载tar.gz版 ...

  3. mysql千万级数据优化查询

    我们在做一个项目,一个网站或一个app时,用户量巨增,当使用的mysql数据库中的表数据达到千万级时,可以从以下方面考滤优化: 1.在设计数据库表的时候就要考虑到优化 2.查询sql语句上的优化 3. ...

  4. Kafka-python 客户端导致的 cpu 使用过高,且无法消费消息的问题

    今天遇到一个情况使用了 Kafka-python 1.3.3 来操作读取 broker 1.0.1 版本的 kafka.出现了 rebalance 之后分配到了客户端,但是 cpu 利用率很高且无法消 ...

  5. Python——pickle模块(永久存储)

    一.作用 讲字典.列表.字符串等对象进行持久化,存储到磁盘上,方便以后使用. 二.dump()方法 pickle.dump(对象,文件,[使用协议]) 作用:将要持久化的数据“对象”,保存到“文件中” ...

  6. Python——Flash框架——用户认证

    一.认证扩展 1.Flask-Login:管理已登录用户的用户会话 2.Werkzeug:计算几码散列值并进行核对 3.itsdangerous:生成并核对加密安全令牌 二.Werkzeug gene ...

  7. LODOP中ADD_PRINT_TABLE、HTM、HTML表格自动分页测试

    LODOP中超文本超过打印项高度会自动分页,那么对于超大行,该行处在分页高度位置会怎样呢?本文用来测试一下三个语句对html中table中超大行在分页高度位置的处理. 测试结果:ADD_PRINT_T ...

  8. springmvc解决中文乱码问题

    1 第一种情况(get接收参数): 最近在用solr做一个搜索服务,发布给手机和pc等客户端调用,调用方式为:   http://www.ganbo.search/search?q="手机& ...

  9. 关于vue-cli的项目结构【转】

    一.总体框架 一个vue-cli的项目结构如下,其中src文件夹是需要掌握的,所以本文也重点讲解其中的文件,至于其他相关文件,了解一下即可. vue-cli项目总体结构 二.文件结构细分 1.buil ...

  10. Html | Vue | Element UI——引入使用

    前言 做个项目,需要一个效果刚好Element UI有,就想配合Vue和Element UI,放在tp5.1下使用,但是引入在线的地址各种报错,本地引入就完美的解决了问题! 代码 __STATIC_J ...