xor有一个很重要的性质就是A xor B xor B=A
所以这道题求[l,r]中p,使a[p] xor a[p+1] xor ... xor a[N] xor x 最大
就是=最大化a[1] xor ……a[n] xor x xor a[1] xor a[2] xor ……a[p-1]
令b[i]=a[1] xor a[2] xor ……a[i]
则最大化b[p] xor b[n] xor X p∈[l-1,r-1] 
抛开区间,求b[p] xor Y的最大值我们需要用到trie树
由于是区间修改,所以要求我们对trie进行可持久化
类比主席树,我们对每个i都建立一棵trie树,不同的节点增开空间
在区间询问的时候,如果两棵树指向同一个节点,说明这一位上的值是不能取的,否则就按trie的贪心做
感觉可持久化就是对历史信息尽可能的保留,对新的值新开空间

 var son:array[-..,..] of longint;
i,t,x,l,r,n,m:longint;
b,root:array[-..] of longint;
ch:char; procedure add(j,x:longint);
var i,a,b,y:longint;
begin
a:=root[j-];
b:=root[j];
for i:= downto do
begin
y:=x and ( shl i);
if y> then y:=;
inc(t);
son[b,y]:=t; //类比主席树
son[b,-y]:=son[a,-y];
a:=son[a,y];
b:=son[b,y];
end;
end; function ask(l,r,x:longint):longint;
var y,i,a,b:longint;
begin
a:=root[l];
b:=root[r];
ask:=;
for i:= downto do
begin
y:=x and ( shl i);
if y> then y:=;
if (son[b,-y]=) or (son[b,-y]=son[a,-y]) then //判断这位在区间内是否存在
begin
a:=son[a,y];
b:=son[b,y];
end
else begin
ask:=ask+ shl i;
a:=son[a,-y];
b:=son[b,-y];
end;
end;
end; begin
readln(n,m);
b[]:=;
t:=;
root[]:=;
x:=;
for i:= downto do
begin
inc(t);
son[x,]:=t;
x:=t;
end;
for i:= to n do
begin
read(x);
b[i]:=b[i-] xor x;
inc(t);
root[i]:=t;
add(i,b[i]);
end;
readln;
for i:= to m do
begin
read(ch);
if ch='A' then
begin
readln(x);
inc(n);
b[n]:=b[n-] xor x;
inc(t);
root[n]:=t;
add(n,b[n]);
end
else begin
readln(l,r,x);
x:=x xor b[n];
writeln(ask(l-,r-,x));
end;
end;
end.

bzoj3261的更多相关文章

  1. 【BZOJ3261】最大异或和 Trie树+贪心

    [BZOJ3261]最大异或和 Description 给定一个非负整数序列 {a},初始长度为 N.       有   M个操作,有以下两种操作类型:1 .A x:添加操作,表示在序列末尾添加一个 ...

  2. [BZOJ3261&BZOJ3166]可持久化trie树及其应用

    可持久化trie树 可持久化trie树现在想来是比较好理解的了,但却看了一个下午... 相当于对于每个状态建立一条链(或者说一棵trie),求解的时候只要让两个点按照相同的步子走然后看sum的大小关系 ...

  3. BZOJ3261 最大异或和 (可持久化Trie)

    ; len=; var x,y,z,n,m,tot,lx,i:longint; sum:..maxn] of longint; rt:..maxn] of longint; time,l,r:..ma ...

  4. bzoj3261: 最大异或和

    可持久化trie.又是%%%Xs酱... #include<cstdio> #include<cstring> #include<iostream> #includ ...

  5. bzoj3261 可持久化trie

    容易想到题解. 总结一下区间异或和题: 1.转化成trie 2.注意空间稍微开大 3.不要一个数右移31位 4.考虑开头要不要插一个零 5.注意可持久get的时候区间是左开右闭,但这样会变成x-2,x ...

  6. ⌈洛谷4735⌋⌈BZOJ3261⌋最大异或和【可持久化01Trie】

    题目链接 [BZOJ传送门] [洛谷传送门] 题解 终于学会了可持久化trie树了.感觉并不是特别的难. 因为可持久化,那么我们就考虑动态开点的trie树. 都知道异或操作是有传递性的,那么我们就维护 ...

  7. BZOJ3261最大异或和——主席树

    题目描述 给定一个非负整数序列{a},初始长度为N. 有M个操作,有以下两种操作类型: 1.Ax:添加操作,表示在序列末尾添加一个数x,序列的长度N+1. 2.Qlrx:询问操作,你需要找到一个位置p ...

  8. bzoj3261: 最大异或和 可持久化trie

    题意:给定一个非负整数序列{a},初始长度为N. 有M个操作,有以下两种操作类型: 1.Ax:添加操作,表示在序列末尾添加一个数x,序列的长度N+1. 2.Qlrx:询问操作,你需要找到一个位置p,满 ...

  9. 2018.08.04 bzoj3261: 最大异或和(trie)

    传送门 简单可持久化01trie树. 实际上这东西跟可持久化线段树貌似是一个东西啊. 要维护题目给出的信息,就需要维护前缀异或和并且把它们插入一棵01trie树,然后利用贪心的思想在上面递归就行了,因 ...

随机推荐

  1. 各种SQL类型

    一.SQL:通常我们说的sql指的是最古老运用最方法的结构化查询语言(Structured Query Language),大部分人接触最多的是数据库查询使用,关系型数据库基本都支持. 二.T-SQL ...

  2. ASP.Net IE10+ SCRIPT:XXX_doPostBack 未定义

    问题描述 GridView中分页控件,点击分页无反应,Linkbutton点击无反应,打开Web控制台,发现如下错误:SCRIPTXXX:_doPostBack 未定义:查询后得知,是由于.NET F ...

  3. ActionLink 的一些小问题

    近日为群友解答问题时遇到一个问题 由于自己以前确实没碰到过 特此记录一下 起因是群友想要用htmlhelper实现这样一个效果 <a href="我是链接" class=&q ...

  4. java: Eclipse jsp tomcat 环境搭建(完整)

    ] 欢迎您! 要学习一门语言,首先要做的就是搭建环境,然后能写一个小的Demo(类似Helloworld),不仅可以建立信心,而且还可以为之后的学习搭建一个验证平台,事半功倍. net领域的vs,号称 ...

  5. (转)META http-equiv="refresh" 实现网页自动跳转

    ***.html自动跳转文件代码如下: <HTML> <HEAD><META http-equiv="Refresh" content="5 ...

  6. font awesome icon

    http://fontawesome.io/icons/ http://www.bootstrapicons.com/

  7. 使用本地光盘安装Microsoft .NET Framework 3.5 for Win8/WinServer2012

    如何使用本地源安装Microsoft .NET Framework 3.5 作为SQL Server 2012的 必要组件,校验组件过程有个小BUG,即使没有安装也通过,但会卡在安装环节(enabli ...

  8. Masonry等比缩放

    第一种: CGFloat width = CGRectGetWidth([[UIScreen mainScreen] bounds]);         CGFloat aspectRatio = 1 ...

  9. 【html】【4】html事件集合

    必看参考: http://www.runoob.com/tags/ref-eventattributes.html http://www.cnblogs.com/jiangchongwei/archi ...

  10. centos下配置多个tomcat同时运行

    首先安装好jdk,下载好tomcat,我的是apache-tomcat-7.0.50,不用专门配置CATALINA_2_BASE,CATALINA_2_HOME等环境变量. 把tomcat解压到lin ...