题意:

思路:可持久化Trie板子题,支持序列插入和询问

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. typedef long long ll;
  4. typedef unsigned int uint;
  5. typedef unsigned long long ull;
  6. typedef long double ld;
  7. typedef pair<int,int> PII;
  8. typedef pair<ll,ll> Pll;
  9. typedef vector<int> VI;
  10. typedef vector<PII> VII;
  11. typedef pair<ll,ll>P;
  12. #define N 12000010
  13. #define M 6000010
  14. #define INF 1e9
  15. #define fi first
  16. #define se second
  17. #define MP make_pair
  18. #define pb push_back
  19. #define pi acos(-1)
  20. #define mem(a,b) memset(a,b,sizeof(a))
  21. #define rep(i,a,b) for(int i=(int)a;i<=(int)b;i++)
  22. #define per(i,a,b) for(int i=(int)a;i>=(int)b;i--)
  23. #define lowbit(x) x&(-x)
  24. #define Rand (rand()*(1<<16)+rand())
  25. #define id(x) ((x)<=B?(x):m-n/(x)+1)
  26. #define ls p<<1
  27. #define rs p<<1|1
  28. #define fors(i) for(auto i:e[x]) if(i!=p)
  29.  
  30. const int MOD=1e8+,inv2=(MOD+)/;
  31. int p=1e4+;
  32. double eps=1e-;
  33. int dx[]={-,,,};
  34. int dy[]={,,-,};
  35.  
  36. char ch[];
  37. int t[N][],s[N],root[N],b[N],cnt;
  38.  
  39. int read()
  40. {
  41. int v=,f=;
  42. char c=getchar();
  43. while(c<||<c) {if(c=='-') f=-; c=getchar();}
  44. while(<=c&&c<=) v=(v<<)+v+v+c-,c=getchar();
  45. return v*f;
  46. }
  47.  
  48. ll readll()
  49. {
  50. ll v=,f=;
  51. char c=getchar();
  52. while(c<||<c) {if(c=='-') f=-; c=getchar();}
  53. while(<=c&&c<=) v=(v<<)+v+v+c-,c=getchar();
  54. return v*f;
  55. }
  56.  
  57. void ins(int p1,int &p2,int z,int d)
  58. {
  59. int p=(z>>d)&;
  60. p2=++cnt;
  61. s[p2]=s[p1]+;
  62. if(d<) return;
  63. t[p2][p^]=t[p1][p^];
  64. ins(t[p1][p],t[p2][p],z,d-);
  65. }
  66.  
  67. int query(int p1,int p2,int z,int d)
  68. {
  69. if(d<) return ;
  70. int p=(z>>d)&;
  71. if(s[t[p2][p^]]-s[t[p1][p^]]) return (<<d)+query(t[p1][p^],t[p2][p^],z,d-);
  72. else return query(t[p1][p],t[p2][p],z,d-);
  73. }
  74.  
  75. int main()
  76. {
  77. //freopen("1.in","r",stdin);
  78. //freopen("1.out","w",stdout);
  79. cnt=;
  80. ins(,root[],,);
  81. int n=read(),m=read();
  82. n++;
  83. rep(i,,n)
  84. {
  85. int x=read();
  86. b[i]=b[i-]^x;
  87. ins(root[i-],root[i],b[i],);
  88. }
  89. while(m--)
  90. {
  91. scanf("%s",ch);
  92. if(ch[]=='A')
  93. {
  94. int x=read();
  95. n++;
  96. b[n]=b[n-]^x;
  97. ins(root[n-],root[n],b[n],);
  98. }
  99. else
  100. {
  101. int l=read(),r=read(),x=read();
  102. int ans=query(root[l-],root[r],b[n]^x,);
  103. printf("%d\n",ans);
  104. }
  105. }
  106.  
  107. return ;
  108. }

【BZOJ3261】最大异或和(可持久化Trie)的更多相关文章

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

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

  2. BZOJ3261: 最大异或和(可持久化trie树)

    题意 题目链接 Sol 设\(sum[i]\)表示\(1 - i\)的异或和 首先把每个询问的\(x \oplus sum[n]\)就变成了询问前缀最大值 可持久化Trie树维护前缀xor,建树的时候 ...

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

    题目描述 给定一个非负整数序列 {a},初始长度为 N.       有M个操作,有以下两种操作类型:1.A x:添加操作,表示在序列末尾添加一个数 x,序列的长度 N+1.2.Q l r x:询问操 ...

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

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

  5. [十二省联考2019]异或粽子——可持久化trie树+堆

    题目链接: [十二省联考2019]异或粽子 求前$k$大异或区间,可以发现$k$比较小,我们考虑找出每个区间. 为了快速得到一个区间的异或和,将原序列做前缀异或和. 对于每个点作为右端点时,我们维护出 ...

  6. 洛谷.5283.[十二省联考2019]异或粽子(可持久化Trie 堆)

    LOJ 洛谷 考场上都拍上了,8:50才发现我读错了题=-= 两天都读错题...醉惹... \(Solution1\) 先求一遍前缀异或和. 假设左端点是\(i\),那么我们要在\([i,n]\)中找 ...

  7. 【xsy1147】 异或(xor) 可持久化trie

    我的脑回路可能比较奇怪. 我们对这些询问离线,将所得序列${a}$的后缀和建$n$棵可持久化$trie$. 对于一组询问$(l,r,x)$,我们在主席树上询问第$l$棵树$-$第r$+1$棵树中与$s ...

  8. [BZOJ4103][Thu Summer Camp 2015]异或运算 可持久化Trie树

    4103: [Thu Summer Camp 2015]异或运算 Time Limit: 20 Sec  Memory Limit: 512 MB Description 给定长度为n的数列X={x1 ...

  9. 【bzoj3689】异或之 可持久化Trie树+堆

    题目描述 给定n个非负整数A[1], A[2], ……, A[n].对于每对(i, j)满足1 <= i < j <= n,得到一个新的数A[i] xor A[j],这样共有n*(n ...

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

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

随机推荐

  1. .Net Core 3.0使用Grpc进行远程过程调用

    因为.Net Core3.0已经把Grpc作为一等臣民了,作为爱好新技术的我,当然要尝鲜体验一下了,当然感觉是Grpc作为跨语言的产品做的相当好喽,比起Dubbo这种的,优势和劣势还是比较明显的. 我 ...

  2. python_0基础开始_day08

    第八节 1,文件操作 文件操作目的: 持久化,永久存储 (数据库之前 -- 文件操作就是代替数据库) 读 1,找到文件位 2,双击打开 3,进行一些操作 4,关闭文件 open() 打开,通过pyth ...

  3. MVCC实现机制

    1. MVCC简介 1.1 什么是MVCC MVCC(Multiversion concurrency control )是一种多版本并发控制机制. 1.2 MVCC是为了解决什么问题? 并发访问(读 ...

  4. git删除已经push的远程文件或文件夹

    在使用git提交项目时,有时候会误提交一下文件,比如:*.iml,*.project,*.settings,.idea/*等文件,有时候这些不需要提交的文件可以加入到.gitignore,在提交的时候 ...

  5. windows下一步到位搭建pycharm的开发环境

    pycharm的开发环境主要涉及到以下三个方面 pycharm的激活 这里采用破解的方式来达到永久激活的目的,因为激活码用着用着就过期的你,会发现不厌其烦的 通过测试,这个破解包适用于2017-201 ...

  6. JQuery——关于CDN(内容分发网络)

    替代方案 如果您不希望下载并存放 jQuery,那么也可以通过 CDN(内容分发网络) 引用它. Staticfile CDN.百度.又拍云.新浪.谷歌和微软的服务器都存有 jQuery . 如果你的 ...

  7. 11条sql技巧

    1. 负向条件查询不能使用索引 select * from order where status!=0 and stauts!=1 not in/not exists都不是好习惯 可以优化为in查询: ...

  8. Dubbo 03 Restful风格的API

    目录 Dubbo03 restful风格的API 根路径 协议 版本 用HTTP协议里的动词来实现资源的增删改查 用例 swagger(丝袜哥) OpenAPI 资源 编写API文档 整合Spring ...

  9. PAT Basic 1013 数素数 (20 分)

    令 P​i​​ 表示第 i 个素数.现任给两个正整数 M≤N≤10​4​​,请输出 P​M​​ 到 P​N​​ 的所有素数. 输入格式: 输入在一行中给出 M 和 N,其间以空格分隔. 输出格式: 输 ...

  10. 【bzoj2523】【CTSC2001】聪明的学生

    真是神仙题,做完后感觉智商提(jiang)升(di)了 这种题一般都是把局面设成状态,然后发现可以由一种状态转移到另一种状态,那就是 $dp$ 了. 但是这道题怎么设呢? 题目中给了你一个结论,一般题 ...