当前位置: 首页 > news >正文

可持久化 Trie

可持久化 Trie

Trie 树的可持久化思路与线段树/平衡树类似,每次都 clone 一个新的节点即可。

唯一需要注意的是实现上的问题,因为 Trie 树一般不写递归,因此要注意实现。

一般实现的可持久化 Trie 都是 01Trie。

Luogu P4735 最大异或和

给定一个长度为 \(n\) 的序列 \(a_1,a_2,\cdots,a_n\)\(m\) 次操作:

  • 给定 \(x\),在序列末尾加入 \(x\)
  • 给定 \(l,r,x\),对于 \(l\leq i\leq r\),输出 \(a_i\oplus a_{i+1}\oplus\cdots\oplus a_n\oplus x\) 的最大值。

显然可以维护前缀异或和 \(s_1,s_2,\cdots,s_n\),即对于 \(i\in[l,r]\),求 \(x\oplus s_n\oplus s_{i-1}\) 最大值。

发现 \(x\oplus s_n\) 为定值,考虑 01Trie 查询 \(s_{i-1}\)

但是需要区间查询,可以使用可持久化 01Trie,加入一个数即一个新版本。

查询时,前缀和差分即可判断存不存在 \(0\)\(1\)

//#include<bits/stdc++.h>
#include<algorithm>
#include<iostream>
#include<cstring>
#include<iomanip>
#include<cstdio>
#include<string>
#include<vector>
#include<cmath>
#include<ctime>
#include<deque>
#include<queue>
#include<stack>
#include<list>
using namespace std;
constexpr const int N=3e5,V=30;
int n;
struct trie{int size,root[N<<1|1];struct node{int m[2];int value;}t[N*100+1];trie(){size=1;root[0]=1;}int clone(int p){t[++size]=t[p];return size;}void insert(int v,int i,int x){int p=root[i]=clone(root[v]);for(int j=V;j>=0;j--){int bit=x>>j&1;t[p].m[bit]=clone(t[p].m[bit]);p=t[p].m[bit];t[p].value++;}}int query(int l,int r,int x){int p=root[r],q=root[l-1];int ans=0;for(int i=V;i>=0;i--){int bit=x>>i&1;if(t[t[p].m[!bit]].value-t[t[q].m[!bit]].value){p=t[p].m[!bit];q=t[q].m[!bit];ans|=1<<i;}else{p=t[p].m[bit];q=t[q].m[bit];}}return ans;}
}t;
int main(){/*freopen("test.in","r",stdin);freopen("test.out","w",stdout);*/ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);int m;cin>>n>>m;int s=0;t.insert(0,1,0);for(int i=1;i<=n;i++){int x;cin>>x;s^=x;t.insert(i,i+1,s);}while(m--){char op;int l,r,x;cin>>op;switch(op){case 'A':int x;cin>>x;s^=x;n++;t.insert(n,n+1,s);break;case 'Q':cin>>l>>r>>x;cout<<t.query(l,r,x^s)<<'\n';break;}}cout.flush();/*fclose(stdin);fclose(stdout);*/return 0;
}
http://www.jsqmd.com/news/360338/

相关文章:

  • SHP数据修复
  • 清华解聘50岁副教授,“非升即走”引热议!
  • 吐血推荐!降AI率软件 千笔 VS speedai,自考党必备神器!
  • 结合这段代码“对象属性变化自动同步到CSV(本地文件)”的核心特性,除了WinForm .NET 4.8界面开发,以下这些场景也非常适配,且能最大化发挥其价值:
  • 必应壁纸图片缓存路径
  • 摆脱论文困扰! 降AI率平台 千笔·降AI率助手 VS 文途AI,MBA专属首选
  • 论文开题季降AI工具实测:10款主流工具对比与选择指南 - 老米_专讲AIGC率
  • 对比一圈后!风靡全网的AI论文工具 —— 千笔·专业论文写作工具
  • 瑞祥商联卡回收平台哪个好?帮你找到最划算的选择! - 团团收购物卡回收
  • 一站式管理!新一代大模型网关神器!
  • 2026年口碑好的COD水质分析仪,在线水质分析仪厂家选购参考名录 - 品牌鉴赏师
  • 协方差矩阵自适应进化策略(CMA-ES)详解:从基础原理到优化算法
  • 一个生成图片的网址
  • 瑞祥商联卡回收平台正规吗?避开骗局看这篇就够了 - 团团收购物卡回收
  • 2026.02.09
  • 建议收藏|专科生专用AI论文工具 —— 千笔写作工具
  • 构建工业级图像分割组件:从模块化设计到高效部署
  • 文化算法(CA)详解:从文化进化到全局优化
  • 一套基于 Redis 分桶 + DB 明细驱动的强一致性库存扣减方案,实现零超卖、零少卖,支持 Redis 宕机自动降级
  • 瑞祥商联卡折现攻略:教你如何找到高价回收平台 - 团团收购物卡回收
  • AI写论文大比拼!4款AI论文生成神器,谁能成为你的写作首选?
  • 基于Java+Springboot+Vue开发的医院门诊预约挂号系统源码+运行步骤+计算机科学与技术
  • 瑞祥商联卡去哪回收?精选高信誉平台识别之道 - 团团收购物卡回收
  • AI写论文秘籍,4款AI论文写作工具助你轻松完成毕业论文!
  • 深度评测:主流图生视频软件服务商核心能力对比
  • AI写论文的宝藏工具!4款AI论文写作神器,搞定各类论文写作!
  • Zen Browser v1.18.4b 丨开源跨平台浏览器
  • AI写论文好帮手!4款AI论文生成工具,助你顺利完成论文!
  • AI写论文的利器!这4款AI论文写作工具,助你快速完成论文!
  • 深度评测:主流图生视频模型的技术路径与商用化能力对比