可持久化Trie

参考可持久化线段树的思想,修改的时候先直接复制,再对需要修改的点新建节点

可持久化Trie也是同样的做法,假设现在需要在原本Trie的基础上插入一个字符串

先把上个Trie的对应节点信息复制过来,对\(son[ch]\)新建节点

void insert(int x,int y,char*st){
int l=strlen(st);
for(int i=0;i<l;i++){
int k=st[i]-'a';t[x].ch[k]=++tot;//新建
x=t[x].ch[k];y=t[y].ch[k];
t[x]=t[y];t[x].v++;//复制并更新
}
}

查询先确定rt,然后类似Trie一样直接把字符串丢进去查即可

int query(int u,char*st){
int l=strlen(st);
for(int i=0;i<l;i++){
int k=st[i]-'a';
if(!t[u].ch[k])return 0;
u=t[u].ch[k];
}
return t[u].v;
}

或者你二进制Trie是这么查的(下面是在一个区间中查异或max的模板)

int query(int x,int y,int num){
int res=0;
for(int i=24;i>=0;i--){
int k=num>>i&1^1;
if(t[y].ch[k]-t[x].ch[k]==0)k^=1;//没有能使该位为1的数
else res|=(1<<i);
x=t[x].ch[k];y=t[y].ch[k];
}
return res;
}

空间=Trie的空间*log

主要是一些字符串或者序列异或的题目中使用,注意到和主席树一样是可减的

常见套路

  • 路径问题就维护根到i的前缀Trie,然后把u,v,lca拿出来搞一搞
  • 子树问题求dfn,rk,直接按dfn跑一遍前缀Trie,之后当区间处理

[note]可持久化Trie的更多相关文章

  1. HDU 4757 Tree(可持久化Trie+Tarjan离线LCA)

    Tree Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 102400/102400 K (Java/Others) Total Su ...

  2. 【BZOJ4260】 Codechef REBXOR 可持久化Trie

    看到异或就去想前缀和(⊙o⊙) 这个就是正反做一遍最大异或和更新答案 最大异或就是很经典的可持久化Trie,从高到低贪心 WA: val&(1<<(base-1))得到的并不直接是 ...

  3. 可持久化Trie & 可持久化平衡树 专题练习

    [xsy1629]可持久化序列 - 可持久化平衡树 http://www.cnblogs.com/Sdchr/p/6258827.html [bzoj4260]REBXOR - Trie 事实上只是一 ...

  4. HDU 4757 Tree(可持久化trie)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4757 题意:给出一棵树,节点有权值.每次询问x到y的路径上与z抑或的最大值. 思路:可持久化trie. ...

  5. 可持久化trie 学习总结

    QAQ 以前一直觉得可持久化trie很难,今天强行写了一发觉得还是蛮简单的嘛 自己的模板是自己手写的,写了几道题目并没有出过错误 THUSC的第二题的解法五貌似就是可持久化trie,时间复杂度O(60 ...

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

    题目链接:BZOJ - 4103 题目分析 THUSC滚粗之后一直没有写这道题,从来没写过可持久化Trie,发现其实和可持久化线段树都是一样的.嗯,有些东西就是明白得太晚. 首先Orz ZYF-ZYF ...

  7. bzoj 2741: 【FOTILE模拟赛】L 分塊+可持久化trie

    2741: [FOTILE模拟赛]L Time Limit: 15 Sec  Memory Limit: 162 MBSubmit: 1116  Solved: 292[Submit][Status] ...

  8. bzoj 2741 分块+可持久化trie

    多个询问l,r,求所有子区间异或和中最大是多少 强制在线 做法: 分块+可持久化trie 1.对于每块的左端点i,预处理出i到任意一个j,()i,j)间所有子区间异或和中最大为多少,复杂度O(\(n\ ...

  9. 【BZOJ2741】【块状链表+可持久化trie】FOTILE模拟赛L

    Description FOTILE得到了一个长为N的序列A,为了拯救地球,他希望知道某些区间内的最大的连续XOR和. 即对于一个询问,你需要求出max(Ai xor Ai+1 xor Ai+2 .. ...

随机推荐

  1. rsync数据同步工具的配置

    rsync数据同步工具的配置 1. rsync介绍 1.1.什么是rsync rsync是一款开源的快速的,多功能的,可实现全量及增量的本地或远程数据同步备份的优秀工具.Rsync软件适用于 unix ...

  2. [Tools] Create a Simple CLI Tool in Node.js with CAC

    Command-line tools can help you with all sorts of tasks. This lesson covers the very basics of setti ...

  3. H5性能调优

    概述 PC优化手段在Mobile侧同样适用 在Mobile侧我们提出三秒种渲染完成首屏指标 基于第二点,首屏加载3秒完成或使用Loading 基于联通3G网络平均338KB/s(2.71Mb/s),所 ...

  4. mysql binlog 使用

    用于数据恢复的binlog 前提条件 1.定时mysqldumps全备数据库 2.开启binlog增量备份 情景:手滑误操作删表操作 立刻 mysql>flush logs;  #开启一个新的b ...

  5. spring 源码下载

    github spring 源码 导入Spring源码方法 java世界中的三大构建工具:ant,maven,gradle gradle 简介

  6. PHP面试题及答案解析(7)—Linux系统命令

    1.请解释下列10个shell命令的用途.top.ps.mv.find.df.cat.chmod.chgrp.grep.wc top:该命令提供了实时对系统处理器状态的监控,它能够实时显示系统中各个进 ...

  7. linux下拷贝隐藏文件

    1.拷贝隐藏文件 把/home/u文件夹中的全部文件(包含隐藏文件)拷贝到/home/user1中  cp   -a   /home/u/.    /home/user1 2.改动主机名: vi /e ...

  8. JavaScript的slice()

    JavaScript slice() 方法 JavaScript Array 对象 定义和用法 slice() 方法可从已有的数组中返回选定的元素. 语法 arrayObject.slice(star ...

  9. synchronized 锁优化

    synchronized 在jdk 1.7之前是重量级锁,独占锁,非公平锁.jdk1.7之后,synchronized引入了 偏向锁,自旋锁,轻量级锁,重量级锁 自旋锁 当线程在获取锁的时候,如果发现 ...

  10. java.lang.NoClassDefFoundError: ch/qos/logback/core/joran/spi/JoranException

    问题描述:启动tomcat服务器的时候,报找不到JoranException类的异常 原因:tomcat中没有logback-core-1.1.2.jar包 解决方法:在tomcat中的lib目录添加 ...