传送门

【题目分析】

emmmm,似乎是个最大异或和的模板?

先将第二个操作里的式子转一下,求a[p]^a[p+1]^....a[n]^x等价于前缀异或和sum[p-1]^sum[n]^x,后面两个的异或值是一个定值,所以我们只用在[l,r]中找到使sum[p]^(sum[n]^x)最大的即可。

【代码~】

#include<bits/stdc++.h>
using namespace std;
const int MAXN=3e7+10;int n,q,x;
int pre;
int rt[MAXN],tot,siz[MAXN],son[MAXN][2];inline char nc(){static char buf[1000000],*p1=buf,*p2=buf;return (p1==p2)&&(p2=(p1=buf)+fread(buf,1,1000000,stdin),(p1==p2))?EOF:*p1++;
}
//#define getchar nc
inline int Read(){int i=0,f=1;char c=getchar();for(;(c>'9'||c<'0')&&c!='-';c=getchar());if(c=='-')  f=-1,c=getchar();for(;c>='0'&&c<='9';c=getchar())  i=(i<<3)+(i<<1)+c-'0';return i*f;
}void insert(int &root,int last,int num){root=++tot;siz[root]=siz[last]+1;int now=root;for(int i=30;i!=-1;--i){int k=(num>>i)&1;son[now][k]=++tot,son[now][k^1]=son[last][k^1];siz[tot]=siz[son[last][k]]+1;now=tot,last=son[last][k];}
}int query(int rt1,int rt2,int num){int ret=0;for(int i=30;i!=-1;--i){int k=(num>>i)&1;if(siz[son[rt2][k^1]]>siz[son[rt1][k^1]])  ret|=(1<<i),rt1=son[rt1][k^1],rt2=son[rt2][k^1];else  rt1=son[rt1][k],rt2=son[rt2][k];}return ret;
}int main(){n=Read()+1,q=Read();insert(rt[1],rt[0],0);for(int i=2;i<=n;++i){pre=pre^Read();insert(rt[i],rt[i-1],pre);}while(q--){char cz[5];scanf("%s",cz);if(cz[0]=='A'){++n;pre=pre^Read();insert(rt[n],rt[n-1],pre);}else{int l=Read(),r=Read(),num=Read();cout<<query(rt[l-1],rt[r],pre^num)<<'\n';}}
}

【洛谷4735】 最大异或和(可持久化01Trie)相关推荐

  1. 洛谷-4735 最大异或和 /【模板】可持久化Trie

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

  2. 洛谷P4735 最大异或和

    题目链接 洛谷P4735 最大异或和 题目描述 给定一个非负整数序列 a{a}a,初始长度为nnn. 有 mmm 个操作,有以下两种操作类型: A x:添加操作,表示在序列末尾添加一个数 xxx,序列 ...

  3. Bzoj3261/洛谷P4735 最大异或和(可持久化Trie)

    题面 Bzoj 洛谷 题解 显然,如果让你查询整个数列的最大异或和,建一颗\(01Trie\),每给定一个\(p\),按照二进制后反方向跳就行了(比如当前二进制位为\(1\),则往\(0\)跳,反之亦 ...

  4. 洛谷 P4735 最大异或和

    一.题目: 洛谷原题 二.思路: 这是一道可持久化trie的板子题. 三.代码: #include<iostream> #include<cstdio> #include< ...

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

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

  6. [洛谷P4735]最大异或和

    题目大意:有一串初始长度为$n$的序列$a$,有两种操作: $A\;x:$在序列末尾加一个数$x$ $Q\;l\;r\;x:$找一个位置$p$,满足$l\leqslant p\leqslant r$, ...

  7. 洛谷 P3359 改造异或树

    传送门 30分做法:(边权为0) 我一开始就在想30分做法,然后就想到了: 首先老套路,正着删边就是倒着加边. 并查集维护连通块大小,每次加边后将两个端点的size值乘起来累加答案. 20分做法: 当 ...

  8. 【洛谷】P3919 【模板】可持久化线段树(主席树)

    题目 传送门:QWQ 分析 主席树的模板,囤着 代码 #include <bits/stdc++.h> using namespace std; const int N=1000010; ...

  9. 【BZOJ 4103】 [Thu Summer Camp 2015]异或运算 可持久化01Trie

    我们观察数据:树套树 PASS    主席树 PASS  一层一个Trie PASS 再看,异或!我们就把目光暂时定在01Tire然后我们发现,我们可以带着一堆点在01Trie上行走,因为O(n*q* ...

最新文章

  1. 细胞内钾多钠少——原初生物的第三大遗迹?
  2. 不讲CRUSH的Ceph教程是不完整的
  3. C# WinForm 软件注册的实现
  4. lwbt的内存分配详解
  5. HDU 4618 - Palindrome Sub-Array(2013MUTC2-1008)(DP)
  6. C#的Winform多语言实现(resx文件)
  7. #时间预测算法_【时间序列】时序预测竞赛之异常检测算法综述
  8. 远控免杀4---Evasion免杀
  9. 服务器搬迁方案_医院机房迁移细则规范 amp; 机房搬迁实施规划方案
  10. 读计算机基础知识心得体会1000字,计算机学习个人心得体会1000字.doc
  11. Qcom平台添加 Camera 驱动(msm8953)
  12. Python3 Cobalt strike shellcode 免杀过 360 卫士和360杀毒
  13. zblog mysql修改_MySQL_网上下载的Zblog模板怎么修改?,      终于下 - phpStudy
  14. cesium雷达图_cesium添加闪烁点,雷达图(一般用于预警)
  15. tvp5150 若干问题,很好的解答
  16. 第四课:如何安装树莓派系统
  17. e1000网卡驱动初感受
  18. 管理学十二(流程与制度的重要性)
  19. 店盈通:拼多多如何看到关键词进店?
  20. MnTTS: 开源蒙古语语音合成数据集及其基线模型

热门文章

  1. 老java手机有什么什么用,80后熟悉的这些手机功能,用过3种以上说明你已经老了...
  2. 王健林电商梦为何会是一场噩梦?
  3. 迅为i.MX6ULL终结者进程基础-进程创建
  4. Red Hat认证工程师(RHCE)简介
  5. AWS Boto3 使用介绍(一)
  6. IDEA全屏代码后左侧有很多空白解决方法
  7. 三年级计算机画图工具教案,小学三年级信息技术教学设计《画图》
  8. mt2503 如何使用META DLL API写两个以上IMEI
  9. 想转SAP FICO顾问的必看(转)
  10. 能贴在Windows11桌面且与手机同步的备忘记事便签