一、题目:

洛谷原题

二、思路:

这是一道可持久化trie的板子题。

三、代码:

#include<iostream>
#include<cstdio>
#include<cstring>#define LL long long
#define FILEIN(s) freopen(s".in","r",stdin)
#define FILEOUT(s) freopen(s".out","w",stdout)
#define mem(s,v) memset(s,v,sizeof(s))using namespace std;
inline LL read(void){LL x=0,f=1;char ch=getchar();while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}return f*x;
}const int maxn=600010;int n,m;int a[maxn],sum[maxn],root[maxn];int trie[maxn*24][2],sz;
int latest[maxn*24];void insert(int i,int k,int p,int q){if(k<0){latest[q]=i;return;}int c=sum[i]>>k&1;if(p)trie[q][c^1]=trie[p][c^1];trie[q][c]=++sz;insert(i,k-1,trie[p][c],trie[q][c]);latest[q]=max(latest[trie[q][0]],latest[trie[q][1]]);
}int ask(int now,int val,int k,int limit){if(k<0){return sum[latest[now]]^val;}int c=val>>k&1;if(latest[trie[now][c^1]]>=limit)return ask(trie[now][c^1],val,k-1,limit);else return ask(trie[now][c],val,k-1,limit);
}int main(){n=read();m=read();latest[0]=-1;root[0]=++sz;insert(0,23,0,root[0]);for(register int i=1;i<=n;++i){a[i]=read();sum[i]=sum[i-1]^a[i];root[i]=++sz;insert(i,23,root[i-1],root[i]);}while(m--){char op[3];scanf("%s",op+1);if(op[1]=='A'){int x=read();root[++n]=++sz;sum[n]=sum[n-1]^x;insert(n,23,root[n-1],root[n]);}else{int l=read(),r=read(),x=read();printf("%d\n",ask(root[r-1],x^sum[n],23,l-1));}}return 0;
}

转载于:https://www.cnblogs.com/little-aztl/p/11191592.html

洛谷 P4735 最大异或和相关推荐

  1. 洛谷P4735 最大异或和

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

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

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

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

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

  4. 洛谷 P3359 改造异或树

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

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

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

  6. YBTOJ洛谷P4551:最长异或路径(trie树)

    洛谷传送门 文章目录 题目描述 解析 代码 题目描述 解析 本题关键就在于一点: 若把每个点的深度dep[i]定义为从根到节点边权的异或和 那么i到j的路径异或和可以表示为: dep[i] ^ dep ...

  7. P4735 最大异或和 01可持久化Trie树模板

    原题:https://www.luogu.org/problemnew/show/P4735 题解:观察一下式子,将a数组求一个异或前缀和,其实就是s[n]^x^s[p-1]的最大值 p∈[l,r], ...

  8. 洛谷P3688/uoj#291. [ZJOI2017]树状数组

    传送门(uoj) 传送门(洛谷) 这里是题解以及我的卡常数历程 话说后面那几组数据莫不是lxl出的这么毒 首先不难发现这个东西把查询前缀和变成了查询后缀和,结果就是查了\([l-1,r-1]\)的区间 ...

  9. 洛谷 P4151 BZOJ 2115 [WC2011]最大XOR和路径

    //bzoj上的题面太丑了,导致VJ的题面也很丑,于是这题用洛谷的题面 题面描述 XOR(异或)是一种二元逻辑运算,其运算结果当且仅当两个输入的布尔值不相等时才为真,否则为假. XOR 运算的真值表如 ...

最新文章

  1. Puppeteer 学习笔记及基本用法
  2. 设计模式:代理模式是什么,Spring AOP还和它有关系?
  3. 如何确保sublime text每次启动时不会自动打开以前打开的文档
  4. css随堂笔记(一)
  5. JedisConnectionException: java.Net.SocketTimeoutException: Read timed
  6. 通过Scanner从控制台获取数据
  7. 【Fiddler 问题】解决关于Fiddler 抓包中,手机网络配置代理后,无法上网
  8. Lego-美团点评接口自动化测试实践
  9. SpringBoot 解决“不支持发行版本xx”的问题
  10. 设计模式:JavaScript
  11. 学习Maven之Maven Surefire Plugin(JUnit篇)(转)
  12. linux 自动安装脚步,linux自动安装lnmp脚步
  13. 【Unity3D插件】DoTween插件(三)
  14. C# VS属性快速封装快捷处理方式
  15. pdf签名无效解决办法_2020最新房屋租赁合同范本(8种无效)
  16. 【名单回顾】2019/2020年第11届蓝桥杯大赛青少年组(北京赛区)选拔赛C++初级组一二等奖获奖名单
  17. 2008 r2 server sql 中文版补丁_Microsoft SQL Server 2008 r2 sp2补丁 64位 官方免费版
  18. android Alarm闹钟发送广播播放音乐,android适配问题
  19. 元宇宙的隐私保护:技术与监管
  20. python卷积神经网络图像,python卷积神经网络代码

热门文章

  1. ai自动生成字幕_使用AI对您的会议进行现场字幕
  2. 阻容感基础05:电容器原理(2)-电容器参数
  3. win11 跳过检测直接升级
  4. lisp 标注螺纹孔_螺纹的规定画法及规定标注
  5. 易语言简单易学,为何无人问津,国产编译语言究竟怎么样?小编带你看
  6. 导出的 EXCEL 用 office2016 打不开
  7. 磁编码器MT6835_SPI读取位置信息
  8. vbs介绍与常见整人代码
  9. A - 小雷的冰茶几
  10. Ansible 第二章