[note]可持久化Trie
可持久化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的更多相关文章
- HDU 4757 Tree(可持久化Trie+Tarjan离线LCA)
Tree Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 102400/102400 K (Java/Others) Total Su ...
- 【BZOJ4260】 Codechef REBXOR 可持久化Trie
看到异或就去想前缀和(⊙o⊙) 这个就是正反做一遍最大异或和更新答案 最大异或就是很经典的可持久化Trie,从高到低贪心 WA: val&(1<<(base-1))得到的并不直接是 ...
- 可持久化Trie & 可持久化平衡树 专题练习
[xsy1629]可持久化序列 - 可持久化平衡树 http://www.cnblogs.com/Sdchr/p/6258827.html [bzoj4260]REBXOR - Trie 事实上只是一 ...
- HDU 4757 Tree(可持久化trie)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4757 题意:给出一棵树,节点有权值.每次询问x到y的路径上与z抑或的最大值. 思路:可持久化trie. ...
- 可持久化trie 学习总结
QAQ 以前一直觉得可持久化trie很难,今天强行写了一发觉得还是蛮简单的嘛 自己的模板是自己手写的,写了几道题目并没有出过错误 THUSC的第二题的解法五貌似就是可持久化trie,时间复杂度O(60 ...
- [BZOJ 4103] [Thu Summer Camp 2015] 异或运算 【可持久化Trie】
题目链接:BZOJ - 4103 题目分析 THUSC滚粗之后一直没有写这道题,从来没写过可持久化Trie,发现其实和可持久化线段树都是一样的.嗯,有些东西就是明白得太晚. 首先Orz ZYF-ZYF ...
- bzoj 2741: 【FOTILE模拟赛】L 分塊+可持久化trie
2741: [FOTILE模拟赛]L Time Limit: 15 Sec Memory Limit: 162 MBSubmit: 1116 Solved: 292[Submit][Status] ...
- bzoj 2741 分块+可持久化trie
多个询问l,r,求所有子区间异或和中最大是多少 强制在线 做法: 分块+可持久化trie 1.对于每块的左端点i,预处理出i到任意一个j,()i,j)间所有子区间异或和中最大为多少,复杂度O(\(n\ ...
- 【BZOJ2741】【块状链表+可持久化trie】FOTILE模拟赛L
Description FOTILE得到了一个长为N的序列A,为了拯救地球,他希望知道某些区间内的最大的连续XOR和. 即对于一个询问,你需要求出max(Ai xor Ai+1 xor Ai+2 .. ...
随机推荐
- [SCSS] Create a gradient with a Sass loop
In this lesson, you will learn how to iteratively generate CSS selectors and attributes using Sass l ...
- iOS block用作属性封装代码
@property (copy, nonatomic) void (^actionBlock)(); @property (copy, nonatomic) void (^actionWithPapa ...
- HTML图片热区
文章来源于:https://www.cnblogs.com/mq0036/p/3337327.html <!DOCTYPE html> <html lang="en&quo ...
- Oracle基础(一) Oracle的安装和卸载
一.数据库的基本概念. 数据库就是数据存储的仓库,可以更快的查询.处理.统计数据,还可以保持数据的一致性.共享性和安全性,方便只能的分析,产生新的有用的信息. 1.数据库的发展阶段: (1)萌芽阶段: ...
- 使用C++11的function/bind组件封装Thread以及回调函数的使用
之前在http://www.cnblogs.com/inevermore/p/4008572.html中采用面向对象的方式,封装了Posix的线程,那里采用的是虚函数+继承的方式,用户通过重写Thre ...
- Intent之对象传递(Parcelable传递对象和对象集合)
接着上一篇文章,以下我们讨论一下怎样利用Parcelable实现Intent之间对象的传递 一.实现对象传递 首先创建User.java实现Parcelable接口: package org.yayu ...
- Shell脚本之:退出循环
Shell也使用 break 和 continue 来跳出循环. break命令 下面的例子中,脚本进入死循环直至用户输入数字大于5,使用break跳出这个循环. #!/bin/bash while ...
- ”ftp使用dos命令“
ftp不能使用dos命令,ftp有专用的命令. 在批处理文件中,如果用到dos命令获取信息(比如:系统日期),将用获取的信息,输出到ftp脚本文件中,然后执行ftp脚本文件. set yyyy=%DA ...
- Convolutional Patch Networks with Spatial Prior for Road Detection and Urban Scene Understanding
Convolutional Patch Networks with Spatial Prior for Road Detection and Urban Scene Understanding 深度学 ...
- linux常用命令(个人学习笔记)
个人说明:学习linux也有半年左右的时间了,从一开始的只会简单的开关机,到现在的熟悉应用一些简单的命令,还是有些进步的,不过对于我这种菜鸟来说,如果不经常用,发现忘的很快.所以就把在学习过程中遇到的 ...