当前位置: 首页 > 编程日记 > 正文

【bzoj3261】最大异或和 可持久化Trie树

题目描述

给定一个非负整数序列 {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


题解

可持久化Trie树

由于x xor x=0,所以$a_p\oplus a_{p+1}\oplus \cdots\oplus a_{n-1}\oplus a_n\oplus x=(a_1\oplus a_2\oplus\cdots\oplus a_{p-2}\oplus a_{p-1})\oplus(a_1\oplus a_2\oplus\cdots\oplus a_{n-1}\oplus a_{n})\oplus x$

维护一个前缀异或和,则这里的sum[n] xor x是已知的,只要求出是这个值最大的sum[p-1]。

因为100000(2)>011111(2),所以可以把前缀和放到可持久化Trie树中,然后贪心求解。

这里需要注意的是l可能等于1,会使用到sum[0],而建立可持久化Trie树时就要用到root[-1],所以把整个数组向右平移一位。

#include <cstdio>
#include <algorithm>
#define N 600010
using namespace std;
int sum[N] , next[N * 20][2] , si[N * 20] , tot , root[N];
char str[5];
int insert(int x , int v)
{int tmp , y , i;bool t;tmp = y = ++tot;for(i = 1 << 24 ; i ; i >>= 1){next[y][0] = next[x][0] , next[y][1] = next[x][1] , si[y] = si[x] + 1;t = v & i , x = next[x][t] , next[y][t] = ++tot , y = next[y][t];}si[y] = si[x] + 1;return tmp;
}
int query(int x , int y , int v)
{int ret = 0 , i;bool t;for(i = 1 << 24 ; i ; i >>= 1){t = v & i;if(si[next[y][t ^ 1]] - si[next[x][t ^ 1]]) ret += i , x = next[x][t ^ 1] , y = next[y][t ^ 1];else x = next[x][t] , y = next[y][t];}return ret;
}
int main()
{int n , m , i , x , y , z;scanf("%d%d" , &n , &m) , n ++ ;for(i = 2 ; i <= n ; i ++ ) scanf("%d" , &x) , sum[i] = sum[i - 1] ^ x;for(i = 1 ; i <= n ; i ++ ) root[i] = insert(root[i - 1] , sum[i]);while(m -- ){scanf("%s%d" , str , &x);if(str[0] == 'A') n ++ , sum[n] = sum[n - 1] ^ x , root[n] = insert(root[n - 1] , sum[n]);else scanf("%d%d" , &y , &z) , printf("%d\n" , query(root[x - 1] , root[y] , sum[n] ^ z));}return 0;
}

转载于:https://www.cnblogs.com/GXZlegend/p/7061360.html

相关文章:

如何给HTML添加事件?

第一种方式&#xff1a; 直接在相应的HTML标签中添加相应的属性&#xff0c;通过属性去添加事件。 <!DOCTYPE html> <html><head><meta charset"UTF-8"><title>HTML添加事件的方式&#xff08;一&#xff09;</title><scri…

Case When 解决简单的是与否

昨天晚上买了一个sql的新书&#xff0c;特别的高兴&#xff0c;晚上就阅读了很多&#xff0c;突然发现以前经常在SQL中使用的case when的用法&#xff0c;以前在csdn上面看到好多&#xff0c;但是就是不知道怎么用&#xff0c;可能那个时候还没有用到的地方&#xff0c;不过现在…

Vue异步组件Demo

Vue异步组件Demo 在大型应用中&#xff0c;我们可能需要将应用拆分为多个小模块&#xff0c;按需从服务器下载。为了进一步简化&#xff0c;Vue.js 允许将组件定义为一个工厂函数&#xff0c;异步地解析组件的定义。Vue.js 只在组件需要渲染时触发工厂函数&#xff0c;并且把结…

JS笔记(一):声明提升

我们习惯将 var a 2; 看作一个声明&#xff0c;而实际上JavaScript引擎并不这么认为。他将 var a 和 a 2 当作两个单独的声明&#xff0c;第一个是编译阶段的任务&#xff0c;第二个则是执行阶段的任务。 ——《你不知道的Js》 变量提升 变量提升的概念已经为大家所熟知&…

event对象(触发机制)

Event 对象代表事件的状态&#xff0c;比如事件在其中发生的元素、键盘按键的状态、鼠标的位置、鼠标按钮的状态&#xff0c;常用事件如下&#xff1a; 事件触发时机onchange用户改变域的内容onclick鼠标点击某个对象onfocus、onblur元素获得焦点、失去焦点时触发onkeydown、o…

3种方式理解旋转变换

有V1(x1,y1), 求这个点绕坐标原点旋转θ角度后的坐标V2(x2,y2) 1.三角函数 假设(x1,y1)(Rcosα,Rsinα) (x2,y2) (Rcos(αθ),Rsin(αθ)) (Rcosαcosθ-Rsinαsinθ,RcosαsinθRsinαcosθ) (x1cosθ-y1sinθ,x1sinθy1cosθ) 2.坐标轴旋转 如果有向量Ax&#xff1d…

Yahoo中国变脸?

今天看到一则消息“门户雅虎走了”&#xff0c;到Yahoo中国网站一看&#xff0c;果然首页变成简洁的以搜索为主的页面。原来的Yahoo首页成为现在的“资讯首页”。似乎Yahoo中国要在搜索上大干一场……

ubuntu14.04上搭建android开发环境

这几天心血来潮&#xff0c;想在ubuntu上写写android软件。所以就上网找些资料在ubuntu上搭建android环境。结果要么时不完整的&#xff0c;要么就是过时的。所以我把我搭建android环境的过程写下了&#xff0c;以便以后忘了能够參考參考&#xff0c;也给来看这篇博文的读者一些…

nuxt.js实战之移动端rem

nuxt.js的项目由于是服务端渲染&#xff0c;通过js动态调整不同尺寸设备的根字体这种rem方案存在一种缺陷。由于设置字体的代码不能做服务端渲染&#xff0c;导致服务端返回的代码一开始没有相应的跟字体&#xff0c;直到与前端代码进行合并根字体改变&#xff0c;这就造成我们…

Window对象中setInterval()和setTimeout()的区别

- setInterval("",time)&#xff1a;每隔指定的时间执行一次调用的函数或计算表达式&#xff0c;如果不停止会无限次去执行&#xff1b; - setTimeout("",time)&#xff1a;在指定时间的最后执行一次调用的函数或计算表达式&#xff0c;仅执行一次。 <…

妹妹生了个女儿,纪念一下

下午艺花打电话告诉我&#xff0c;春兰生了个女儿。 赶紧发了短信过去询问情况&#xff0c;没想到妹夫就打了电话过来&#xff0c;换了她上线&#xff0c;声音里透着初为人母的喜悦&#xff0c;很为她高兴。她说生产不是很顺利&#xff0c;后来剖腹才产下了小外甥女&#xff0c…

如何获取HTML元素对应JavaScript对象?

<!DOCTYPE html> <html><head><meta charset"UTF-8"><title></title></head><body><!--如何获取HTML元素对应JavaScript对象--><!--我们首先要明白标签和元素的区别&#xff1a;标签&#xff1a;div标签&a…

HTML样式以及使用

HTML的样式包含&#xff1a; 1&#xff0c;标签{style &#xff0c;link} 2。属性{rel"styleSheet"外部样式表&#xff0c;type"text/css",margin-left:边距} 外部样式的插入方法&#xff1a;当中myStyle.css是你自定义的css文件&#xff0c;里面能够写上你…

VMWARE虚拟机安装系统提示CPU已被客户机操作系统禁用和secureCUT乱码

错误&#xff1a;VMWARE虚拟机安装系统提示CPU已被客户机操作系统禁用 改正&#xff1a;找到虚拟机的位置找到下图灰色的部分&#xff1a;打开 .vmx后缀的操作系统配置文件&#xff0c;加入以下代码&#xff1a; cpuid.1.eax :: 2.补充一个secureCUT乱码的 1.找到会话管理----…

代码 设计 生活 (2)--- 菜鸟

刚开始涉足这个领域&#xff0c;可以说自己是个十足的菜鸟&#xff0c;不对&#xff0c;菜鸟是行内行对新人的称呼&#xff0c;应该说我当时孤陋寡闻的连菜鸟这个词都没听说过。既然进了这行&#xff0c;也就先从基层的菜鸟做起吧。说实话初中和高中是有开计算机课程的&#xf…

如何用JavaScript操作form表单组件?

一、用JavaScript操作按钮&#xff1a; <!DOCTYPE html> <html><head><meta charset"UTF-8"><title>JavaScript操作form表单组件</title></head><body><span></span><br /><!--用JavaScript操…

电梯演讲(团队)

各位同学大家好&#xff0c;我的产品时间管理系统是为了解决大学生们制定计划难和执行计划难的痛苦&#xff0c;他们需要一个能够帮助他们制定时间计划并且可以起到一定督促作用的软件&#xff0c;但是现有的方案并没有很好的解决这些需求&#xff0c;我们可以帮助用户 一键定做…

1291 火车线路(区间修改,区间最值)

1291 火车线路 时间限制: 1 s空间限制: 128000 KB题目等级 : 大师 Master题目描述 Description 某列火车行使在C个城市之间(出发的城市编号为1&#xff0c;结束达到的城市的编号为C)&#xff0c;假设该列火车有S个座位&#xff0c;现在有R笔预订票的业务。现在想对这R笔业务进行…

在DataTable中创建计算列

我们知道DataTable是内存中的一个表&#xff0c;可以用DataColumn和DataRow来构造一个DataTable,并且用DataColumn的Expression属性来创建计算列。 (1)创建计算列,该列的值是其它列的计算值.如&#xff1a; DataSet1.Tables("myTable").Columns("Pri…

go 网络请求篇

---恢复内容开始--- 今天特意找了下go的网络请求篇&#xff0c;get请求是ok的&#xff0c;post请求一直不下来&#xff0c;搜索了下&#xff0c;代码都差不多&#xff0c;无法拿到post数据&#xff0c;先整理一篇&#xff0c;亲测可用。 针对post &#xff0c;先来说下post 四种…

jQuery添加DOM节点常用的5种方法

一、内部插入&#xff08;前插入、后插入&#xff09;&#xff1a; <!DOCTYPE html> <html><head><meta charset"UTF-8"><title>jQuery添加DOM节点常用的五种方法</title><script type"text/javascript" src"…

未能从程序集 XX加载类型XXX的错误解决方法(借以提醒NHibernate使用者)

这是写.hbm.xml文件最容易犯的错误之一首先,Class的Name属性必须是"完全限定类名,程序集名"这里,例如<class name"ibiz.core.domain.product,ibiz.core">很多人在这里写成"product"或者"product,ibiz.core",这样,没有写上namesp…

正则最常用到的东西

一种组合方式: (.*?)匹配除换行符以外任意字符,匹配模式加上re.S,则开启无敌模式,匹配一切.需要的内容放在括号里面. 两个方法: re.searchgroup()可以找到第几个括号的东西,在确定只有一个内容时,使用re.search会提高效率, 因为re.search找到第一个就不会去找了,而findall会遍…

2005年你看过的,认为比较好的书,请大家一起来评评

我今年看过的书:设计模式 第三遍了..呵呵..有时候莫名其妙的拿到书就很兴奋..充满魔力的书...敏捷软件开发&#xff1a;原则、模式与实践 第二遍了..和第一本一样..同样充满着魔力..Java编程思想 (第二版) 看第二遍了,主要是补充一下以前看不懂的,或者忽略过的技术..比如垃…

从今天开始收集一些经典的算法。

一。用过excel的都知道excel的列编号是这样的&#xff1a; a b c .... z aa ab ac .... az ba bb bc .... yz za zb zc .... zz aaa aab aac .... 分别代表以下编号&#xff1a; 1 2 3 .... 26 27 28 29 .... 52 53 54 55 .... 676 677 678 679 .... 702 703 704 705 .... 请写…

ros ddns

ROS5X-6X脚本&#xff08;10-15分钟执行一次&#xff09;#DDNS本站帐号:global ddnsuser "用户名" #DDNS本站密码:global ddnspass "密码"#ROS系统版本&#xff08;5X,6X&#xff09;:global rver "5X"#DDNS域名(本站添加的子域名):global zho…

apicloud 基础

时间成本 人力成本 很多人想开发app 又碍于时间和金钱成本 。 本色对app 要求不高的话。 混合app 开发是一种很好的方式。 apicloud 就是一种很好的方式。 apicloud 配合aui 和vue 既节省时间 又加大了开发效率。不失为创业公司的选择。 对前端来讲 你需要的学习有几个方…

jQuery中的页面载入($()、ready(fn)、onload)

用jQuery进行页面载入时有集中方式&#xff0c;我们通过例子来说明一下&#xff1a; 第一种&#xff08;通过window.onload()&#xff09;&#xff1a; <!DOCTYPE html> <html><head><meta charset"UTF-8"><title></title><…

性能,安全,集成才是web之道

年底了,又是一年过去了.今年感觉收获颇多..做web开发将近4年时光,期间没有做过任何完整的winApp,一直从事者网络开发.从最初的留言本--新闻--企业网站--论坛--聊天室--大型门户网站--大流量下载网站--网站系统优化,一路走来,不仅仅是技术上的进步,更重要的是思想上的成熟..今天…

站立会议第四天

今天是我们冲刺周期第四天&#xff0c;今天的站立会议主要有以下内容&#xff1a; 1.完成录入菜的数量函数的编写&#xff08;gersort&#xff09; 部分代码如下&#xff1a; void Cmenu::getsort(int SORT) // 录入所点菜的数量 { sortSORT; } cout<<"…