题目大意:让你维护一个序列,支持在序列末插入一个数,支持询问$[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$里

  1. #include <cmath>
  2. #include <queue>
  3. #include <vector>
  4. #include <cstdio>
  5. #include <cstring>
  6. #include <algorithm>
  7. #define N1 600100
  8. #define N2 16000100
  9. #define MM 100
  10. #define ll long long
  11. #define dd double
  12. #define uint unsigned int
  13. #define mod 1000000007
  14. #define idx(X) (X-'a')
  15. using namespace std;
  16.  
  17. int gint()
  18. {
  19. int ret=,fh=;char c=getchar();
  20. while(c<''||c>''){if(c=='-')fh=-;c=getchar();}
  21. while(c>=''&&c<=''){ret=ret*+c-'';c=getchar();}
  22. return ret*fh;
  23. }
  24. int bin[];
  25. struct Trie{
  26. int ch[N2][],root[N1],num[N2],tot;
  27. void init(){
  28. tot=;int x=;root[]=;
  29. for(int i=;i>=;i--)
  30. ch[x][]=++tot,x=ch[x][],num[x]=;
  31. }
  32. void insert(uint s,int id,int w)
  33. {
  34. int p,x,y;
  35. root[id]=++tot;
  36. x=root[id],y=root[id-];
  37. for(int i=;i>=;i--){
  38. p=(s&bin[i])?:;
  39. ch[x][p]=++tot;
  40. ch[x][p^]=ch[y][p^];
  41. x=ch[x][p],y=ch[y][p];
  42. num[x]=num[y]+w;
  43. }
  44. }
  45. uint query(int l,int r,uint s)
  46. {
  47. int x,y,sx,sy,p;uint ans=;
  48. y=l<?:root[l],x=root[r];
  49. for(int i=;i>=;i--){
  50. p=(s&bin[i])?:;
  51. if(num[ch[x][p^]]-num[ch[y][p^]]>){
  52. x=ch[x][p^],y=ch[y][p^];
  53. ans|=bin[i];
  54. }else if(num[ch[x][p]]-num[ch[y][p]]>){
  55. x=ch[x][p],y=ch[y][p];
  56. }else break;
  57. }return ans;
  58. }
  59. }T;
  60. int n,m;
  61. uint a[N1],pa[N1];
  62.  
  63. int main()
  64. {
  65. //freopen("t1.in","r",stdin);
  66. scanf("%d%d",&n,&m);
  67. for(int i=;i<=;i++)
  68. bin[i]=(<<i);
  69. T.init();
  70. for(int i=;i<=n;i++)
  71. {
  72. a[i]=gint();
  73. pa[i]=pa[i-]^a[i];
  74. T.insert(pa[i],i,);
  75. }
  76. char str[];
  77. int l,r;uint x;
  78. for(int i=;i<=m;i++)
  79. {
  80. scanf("%s",str);
  81. if(str[]=='A'){
  82. n++;a[n]=gint();
  83. pa[n]=pa[n-]^a[n];
  84. T.insert(pa[n],n,);
  85. }else{
  86. l=gint(),r=gint(),x=gint();
  87. printf("%u\n",T.query(l-,r-,pa[n]^x));
  88. }
  89. }
  90. return ;
  91. }

BZOJ 3261 最大异或和 (可持久化01Trie)的更多相关文章

  1. BZOJ 3261: 最大异或和( 可持久化trie )

    搞成前缀和然后就可以很方便地用可持久化trie维护了.时间复杂度O((N+M)*25) -------------------------------------------------------- ...

  2. bzoj 3261 最大异或和 可持久化字典树(01树)

    题目传送门 思路: 由异或的性质可得,题目要求的式子可以转化成求$max(pre[n]^x^pre[i])$,$pre[i]$表示前缀异或和,那么我们现在就要求出这个东西,所以用可持久化字典树来求,每 ...

  3. BZOJ 3261 最大异或和 可持久化Trie树

    题目大意:给定一个序列,提供下列操作: 1.在数组结尾插入一个数 2.给定l,r,x,求一个l<=p<=r,使x^a[p]^a[p+1]^...^a[n]最大 首先我们能够维护前缀和 然后 ...

  4. bzoj 3261: 最大异或和 (可持久化trie树)

    3261: 最大异或和 Time Limit: 10 Sec  Memory Limit: 512 MB Description       给定一个非负整数序列 {a},初始长度为 N.       ...

  5. BZOJ 3261: 最大异或和位置-贪心+可持久化01Trie树

    3261: 最大异或和 Time Limit: 10 Sec  Memory Limit: 512 MBSubmit: 3519  Solved: 1493[Submit][Status][Discu ...

  6. BZOJ 4103 [Thusc 2015]异或运算 (可持久化01Trie+二分)

    题目大意:给你一个长方形矩阵,位置$i,j$上的数是$a_{i}\;xor\;b_{j}$,求某个子矩阵内第$K$大的值 最先想的是二分答案然后验证,然而是$O(qnlogmloga_{i})$,不出 ...

  7. BZOJ 3689 异或之 (可持久化01Trie+堆)

    题目大意:给你一个序列,求出第$K$大的两两异或值 先建出来可持久化$01Trie$ 用一个$set$/堆存结构体,存某个异或对$<i,j>$的第二关键字$j$,以及$ai\;xor\;a ...

  8. P5283 [十二省联考2019]异或粽子 可持久化01Trie+线段树

    $ \color{#0066ff}{ 题目描述 }$ 小粽是一个喜欢吃粽子的好孩子.今天她在家里自己做起了粽子. 小粽面前有 \(n\) 种互不相同的粽子馅儿,小粽将它们摆放为了一排,并从左至右编号为 ...

  9. bzoj 3261 最大异或和【可持久化trie】

    因为在后面加数字又求后缀和太麻烦,所以xor[p...n]=xor[1...n]^xor[p-1...n]. 首先处理出来区间异或前缀和,对前缀和建trie树(在最前面放一棵0表示最开始的前缀和 然后 ...

随机推荐

  1. ZBrush软件中的笔触类型

    在ZBrush® 中我们通过各种笔触类型,确定在使用ZBrush®画笔进行绘制时画笔的变化方式及状态.使用多种画笔绘制根据选择不同的笔触组合绘制,能够得到繁多变化丰富的制作效果. 选择笔触的类型 点击 ...

  2. Java从入门到精通一步到位!

    Java作为近几年来非常火的编程语言,转行来做Java的人不计其数,但如今真正的人才仍然匮乏,所以学习Java一定要有一个系统的学习规划课程.阿里云大学帮您规划Java学习路线可以帮助您从一个小白成长 ...

  3. Java压缩图片

    阅读目录 前言 压缩的要求 实现 优点 其他功能 前言 作为靠谱的java服务端程序员,图片这个事情一直是个头疼的事情. 现在很多网站上,都有上传图片这个功能,而图片对于现在的很多手机来说,拍摄出来的 ...

  4. 一些css兼容问题

    由于各浏览器的不同,会存在一些兼容问题,特别是兼容IE6/7/8 下面简单介绍了一些解决方法,更多问题可以访问 W3help.org来查看. 可以通过js获取浏览器版本 document.body.i ...

  5. [luogu2579 ZJOI2005] 沼泽鳄鱼(矩阵快速幂)

    传送门 题目描述 潘塔纳尔沼泽地号称世界上最大的一块湿地,它地位于巴西中部马托格罗索州的南部地区.每当雨季来临,这里碧波荡漾.生机盎然,引来不少游客. 为了让游玩更有情趣,人们在池塘的中央建设了几座石 ...

  6. 《你又怎么了我错了行了吧》【Beta】Scrum meeting 1

    第一天 日期:2019/6/24 前言: 第1次会议在女生宿舍召开 对前面的开发成果进行验收和测试,继续完善项目 1.1 今日完成任务情况以及明日任务安排 姓名 当前阶段任务 下一阶段任务 刘 佳 对 ...

  7. JAVA 多线程知识总结(一)

    一,线程的生命周期以及五种基本状态 关于JAVA线程的生命周期,首先看一下下面这张图 上图中基本上囊括了Java中多线程各重要知识点.掌握了上图中的各知识点,Java中的多线程也就基本上掌握了. Ja ...

  8. ANY和ALL

    8.在WHERE中使用ANY和ALL条件   字段 >ANY(值1,值2,值3...):字段值大于集合任何一个       值就算满足条件.     字段 >ALL(值1,值2,值3... ...

  9. libvips

    libvips : an image processing library libvips is a 2D image processing library. Compared tosimilar l ...

  10. ArrayList 的实现原理

    ArrayList  是List接口的可变数组的实现.实现了所有可选列表的操作,并包括null值在内的所有元素.此类还提供了一些方法来操作内部用来存储列表的数组大小. ArrayList 的是实现: ...