BZOJ 3261 最大异或和 (可持久化01Trie)
题目大意:让你维护一个序列,支持在序列末插入一个数,支持询问$[l,r]$区间内选择一个位置$p$,使$xor\sum_{i=p}^{n}a_{i}$最大
可持久化$01Trie$裸题,把 区间异或和 转化为区间端点前缀异或和的异或值
即求$xsum_{n}\;xor\;max(xsum_{i})i\in[l-1,r-1]$的最大值
那么在可持久化$01Trie$里是$r-1$的$Trie$对$l-2$的$Trie$做差
需要先把$0$推入$Trie$里
- #include <cmath>
- #include <queue>
- #include <vector>
- #include <cstdio>
- #include <cstring>
- #include <algorithm>
- #define N1 600100
- #define N2 16000100
- #define MM 100
- #define ll long long
- #define dd double
- #define uint unsigned int
- #define mod 1000000007
- #define idx(X) (X-'a')
- using namespace std;
- int gint()
- {
- int ret=,fh=;char c=getchar();
- while(c<''||c>''){if(c=='-')fh=-;c=getchar();}
- while(c>=''&&c<=''){ret=ret*+c-'';c=getchar();}
- return ret*fh;
- }
- int bin[];
- struct Trie{
- int ch[N2][],root[N1],num[N2],tot;
- void init(){
- tot=;int x=;root[]=;
- for(int i=;i>=;i--)
- ch[x][]=++tot,x=ch[x][],num[x]=;
- }
- void insert(uint s,int id,int w)
- {
- int p,x,y;
- root[id]=++tot;
- x=root[id],y=root[id-];
- for(int i=;i>=;i--){
- p=(s&bin[i])?:;
- ch[x][p]=++tot;
- ch[x][p^]=ch[y][p^];
- x=ch[x][p],y=ch[y][p];
- num[x]=num[y]+w;
- }
- }
- uint query(int l,int r,uint s)
- {
- int x,y,sx,sy,p;uint ans=;
- y=l<?:root[l],x=root[r];
- for(int i=;i>=;i--){
- p=(s&bin[i])?:;
- if(num[ch[x][p^]]-num[ch[y][p^]]>){
- x=ch[x][p^],y=ch[y][p^];
- ans|=bin[i];
- }else if(num[ch[x][p]]-num[ch[y][p]]>){
- x=ch[x][p],y=ch[y][p];
- }else break;
- }return ans;
- }
- }T;
- int n,m;
- uint a[N1],pa[N1];
- int main()
- {
- //freopen("t1.in","r",stdin);
- scanf("%d%d",&n,&m);
- for(int i=;i<=;i++)
- bin[i]=(<<i);
- T.init();
- for(int i=;i<=n;i++)
- {
- a[i]=gint();
- pa[i]=pa[i-]^a[i];
- T.insert(pa[i],i,);
- }
- char str[];
- int l,r;uint x;
- for(int i=;i<=m;i++)
- {
- scanf("%s",str);
- if(str[]=='A'){
- n++;a[n]=gint();
- pa[n]=pa[n-]^a[n];
- T.insert(pa[n],n,);
- }else{
- l=gint(),r=gint(),x=gint();
- printf("%u\n",T.query(l-,r-,pa[n]^x));
- }
- }
- return ;
- }
BZOJ 3261 最大异或和 (可持久化01Trie)的更多相关文章
- BZOJ 3261: 最大异或和( 可持久化trie )
搞成前缀和然后就可以很方便地用可持久化trie维护了.时间复杂度O((N+M)*25) -------------------------------------------------------- ...
- bzoj 3261 最大异或和 可持久化字典树(01树)
题目传送门 思路: 由异或的性质可得,题目要求的式子可以转化成求$max(pre[n]^x^pre[i])$,$pre[i]$表示前缀异或和,那么我们现在就要求出这个东西,所以用可持久化字典树来求,每 ...
- BZOJ 3261 最大异或和 可持久化Trie树
题目大意:给定一个序列,提供下列操作: 1.在数组结尾插入一个数 2.给定l,r,x,求一个l<=p<=r,使x^a[p]^a[p+1]^...^a[n]最大 首先我们能够维护前缀和 然后 ...
- bzoj 3261: 最大异或和 (可持久化trie树)
3261: 最大异或和 Time Limit: 10 Sec Memory Limit: 512 MB Description 给定一个非负整数序列 {a},初始长度为 N. ...
- BZOJ 3261: 最大异或和位置-贪心+可持久化01Trie树
3261: 最大异或和 Time Limit: 10 Sec Memory Limit: 512 MBSubmit: 3519 Solved: 1493[Submit][Status][Discu ...
- BZOJ 4103 [Thusc 2015]异或运算 (可持久化01Trie+二分)
题目大意:给你一个长方形矩阵,位置$i,j$上的数是$a_{i}\;xor\;b_{j}$,求某个子矩阵内第$K$大的值 最先想的是二分答案然后验证,然而是$O(qnlogmloga_{i})$,不出 ...
- BZOJ 3689 异或之 (可持久化01Trie+堆)
题目大意:给你一个序列,求出第$K$大的两两异或值 先建出来可持久化$01Trie$ 用一个$set$/堆存结构体,存某个异或对$<i,j>$的第二关键字$j$,以及$ai\;xor\;a ...
- P5283 [十二省联考2019]异或粽子 可持久化01Trie+线段树
$ \color{#0066ff}{ 题目描述 }$ 小粽是一个喜欢吃粽子的好孩子.今天她在家里自己做起了粽子. 小粽面前有 \(n\) 种互不相同的粽子馅儿,小粽将它们摆放为了一排,并从左至右编号为 ...
- bzoj 3261 最大异或和【可持久化trie】
因为在后面加数字又求后缀和太麻烦,所以xor[p...n]=xor[1...n]^xor[p-1...n]. 首先处理出来区间异或前缀和,对前缀和建trie树(在最前面放一棵0表示最开始的前缀和 然后 ...
随机推荐
- ZBrush软件中的笔触类型
在ZBrush® 中我们通过各种笔触类型,确定在使用ZBrush®画笔进行绘制时画笔的变化方式及状态.使用多种画笔绘制根据选择不同的笔触组合绘制,能够得到繁多变化丰富的制作效果. 选择笔触的类型 点击 ...
- Java从入门到精通一步到位!
Java作为近几年来非常火的编程语言,转行来做Java的人不计其数,但如今真正的人才仍然匮乏,所以学习Java一定要有一个系统的学习规划课程.阿里云大学帮您规划Java学习路线可以帮助您从一个小白成长 ...
- Java压缩图片
阅读目录 前言 压缩的要求 实现 优点 其他功能 前言 作为靠谱的java服务端程序员,图片这个事情一直是个头疼的事情. 现在很多网站上,都有上传图片这个功能,而图片对于现在的很多手机来说,拍摄出来的 ...
- 一些css兼容问题
由于各浏览器的不同,会存在一些兼容问题,特别是兼容IE6/7/8 下面简单介绍了一些解决方法,更多问题可以访问 W3help.org来查看. 可以通过js获取浏览器版本 document.body.i ...
- [luogu2579 ZJOI2005] 沼泽鳄鱼(矩阵快速幂)
传送门 题目描述 潘塔纳尔沼泽地号称世界上最大的一块湿地,它地位于巴西中部马托格罗索州的南部地区.每当雨季来临,这里碧波荡漾.生机盎然,引来不少游客. 为了让游玩更有情趣,人们在池塘的中央建设了几座石 ...
- 《你又怎么了我错了行了吧》【Beta】Scrum meeting 1
第一天 日期:2019/6/24 前言: 第1次会议在女生宿舍召开 对前面的开发成果进行验收和测试,继续完善项目 1.1 今日完成任务情况以及明日任务安排 姓名 当前阶段任务 下一阶段任务 刘 佳 对 ...
- JAVA 多线程知识总结(一)
一,线程的生命周期以及五种基本状态 关于JAVA线程的生命周期,首先看一下下面这张图 上图中基本上囊括了Java中多线程各重要知识点.掌握了上图中的各知识点,Java中的多线程也就基本上掌握了. Ja ...
- ANY和ALL
8.在WHERE中使用ANY和ALL条件 字段 >ANY(值1,值2,值3...):字段值大于集合任何一个 值就算满足条件. 字段 >ALL(值1,值2,值3... ...
- libvips
libvips : an image processing library libvips is a 2D image processing library. Compared tosimilar l ...
- ArrayList 的实现原理
ArrayList 是List接口的可变数组的实现.实现了所有可选列表的操作,并包括null值在内的所有元素.此类还提供了一些方法来操作内部用来存储列表的数组大小. ArrayList 的是实现: ...