01-trie练习
这里用递归实现01-trie, 可以看做是区间长度为2的幂的权值线段树, 能实现权值的所有操作, 异或时, 翻转左右儿子即可.
练习1 CF 817E Choosing The Commander
大意: 要求维护一个集合, 给定三种操作:
1. 插入属性$p_i$的元素
2. 删除属性$p_i$的元素
3. 询问集合中有多少元素异或$p_i$后的值小于$l_i$
算是比较简单的01-trie入门题, 假若每次都异或0的话, 完全就是裸的权值, 非0的话, 对于非0位翻转左右儿子即可
#include <iostream>
#include <algorithm>
#include <math.h>
#include <cstdio>
#define REP(i,a,n) for(int i=a;i<=n;++i)
using namespace std; const int N = 1e5+10, sz = 27;
int n, T, tot;
struct {int ch[2],sum;} tr[N<<5]; void add(int &o, int d, int x, int v) {
if (!o) o=++tot;
tr[o].sum += v;
if (d>=0) add(tr[o].ch[x>>d&1],d-1,x,v);
} int query(int o, int d, int x, int v) {
if (!o) return 0;
int f1 = x>>d&1, f2 = v>>d&1;
if (f2) return tr[tr[o].ch[f1]].sum+query(tr[o].ch[f1^1],d-1,x,v);
return query(tr[o].ch[f1],d-1,x,v);
} int main() {
scanf("%d", &n);
REP(i,1,n) {
int op, x, v;
scanf("%d%d", &op, &x);
if (op==1) add(T,sz,x,1);
else if (op==2) add(T,sz,x,-1);
else {
scanf("%d", &v);
printf("%d\n", query(T,sz,x,v));
}
}
}
练习2 : CF 842D Vitya and Strange Lesson
大意: 给定$n$个数的集合, 每次将集合中所有数异或$x$, 求整个集合的mex
#include <iostream>
#include <algorithm>
#include <math.h>
#include <cstdio>
#define REP(i,a,n) for(int i=a;i<=n;++i)
using namespace std; const int N = <<;
int n, m, tot, T;
int vis[N];
struct {int ch[],sum;} tr[N<<]; void ins(int &o, int d, int x) {
if (!o) o=++tot;
++tr[o].sum;
if (d>=) ins(tr[o].ch[x>>d&],d-,x);
} int query(int o, int d, int x) {
if (d<) return ;
int t = x>>d&;
if (tr[tr[o].ch[t]].sum==(<<d)) return (<<d)^query(tr[o].ch[t^],d-,x);
return query(tr[o].ch[t],d-,x);
} int main() {
scanf("%d%d", &n, &m);
REP(i,,n) {
int t;
scanf("%d", &t);
if (vis[t]) continue;
vis[t] = ;
ins(T,,t);
}
int num = ;
REP(i,,m) {
int t;
scanf("%d", &t);
printf("%d\n", query(T,,num^=t));
}
}
01-trie练习的更多相关文章
- hdu 4825 Xor Sum (01 Trie)
链接:http://acm.hdu.edu.cn/showproblem.php?pid=4825 题面: Xor Sum Time Limit: 2000/1000 MS (Java/Others) ...
- [一本通学习笔记] 字典树与 0-1 Trie
字典树中根到每个结点对应原串集合的一个前缀,这个前缀由路径上所有转移边对应的字母构成.我们可以对每个结点维护一些需要的信息,这样即可以去做很多事情. #10049. 「一本通 2.3 例 1」Phon ...
- 可持久化0-1 Trie 简介
Trie树是字符串问题中应用极为广泛的一种数据结构,可以拓展出AC自动机.后缀字典树等实用数据结构. 然而在此我们考虑0-1 Trie的应用,即在序列最大异或问题中的应用. 这里的异或是指按位异或.按 ...
- 「模板」 01 Trie实现平衡树功能
不想多说什么了.费空间,也不算太快,唯一的好处就是好写吧. #include <cstdio> #include <cstring> const int MAXN=100010 ...
- CSU 1216异或最大值 (0-1 trie树)
Description 给定一些数,求这些数中两个数的异或值最大的那个值 Input 多组数据.第一行为数字个数n,1 <= n <= 10 ^ 5.接下来n行每行一个32位有符号非负整数 ...
- 三元组[01 Trie计数]
也许更好的阅读体验 \(\mathcal{Description}\) \(\mathcal{Solution}\) 有两种方法都可以拿到满分 \(Solution\ 1\) 考虑枚举\(y\) 建两 ...
- P4735 最大异或和 01 Trie
题目描述 给定一个非负整数序列 \(\{a\}\),初始长度为\(n\). 有 \(m\) 个操作,有以下两种操作类型: \(A\ x\):添加操作,表示在序列末尾添加一个数 \(x\),序列的长度 ...
- poj 3764 The xor-longest Path (01 Trie)
链接:http://poj.org/problem?id=3764 题面: The xor-longest Path Time Limit: 2000MS Memory Limit: 65536K ...
- bzoj 4260: Codechef REBXOR (01 Trie)
链接: https://www.lydsy.com/JudgeOnline/problem.php?id=4260 题面: 4260: Codechef REBXOR Time Limit: 10 S ...
- hdu 5536 Chip Factory (01 Trie)
链接:http://acm.hdu.edu.cn/showproblem.php?pid=5536 题面; Chip Factory Time Limit: 18000/9000 MS (Java/O ...
随机推荐
- pythonl类继承例子
#coding=utf-8 class Person(object): def __init__(self,name,age): self.name=name sel ...
- bzoj1698 / P1606 [USACO07FEB]白银莲花池Lilypad Pond
P1606 [USACO07FEB]白银莲花池Lilypad Pond 转化为最短路求解 放置莲花的方法如果直接算会有重复情况. 于是我们可以先预处理和已有莲花之间直接互相可达的点,将它们连边(对,忽 ...
- updateByPrimaryKeySelective更新失败
问题:使用Mybatis中Mapper内置方法updateByPrimaryKeySelective更新失败. 发现:控制台打印出来的sql语句发现where条件出现所有属性. 解决:映射的实体类没有 ...
- 格式化输出%与format
一.%的用法 1.1整数输出 %o —— oct 八进制 : %d —— dec 十进制 : %x —— hex 十六进制 >>> print('%o' % 20) 24 >& ...
- 三种常用的js数组去重方法
第一种是比较常规的方法 思路: 1.构建一个新的数组存放结果 2.for循环中每次从原数组中取出一个元素,用这个元素循环与结果数组对比 3.若结果数组中没有该元素,则存到结果数组中 Array.pro ...
- 如何修改bootstrap模态框的backdrop蒙版区域的颜色?
参考地址: http://www.cnblogs.com/9miao/p/4988196.html 蒙板样式实现: 大家或许注意到了,在做模态弹出窗时,底部常常会有一个透明的黑色蒙层效果:在Boots ...
- JavaScript 开闭原则OCP
代码: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3. ...
- FJNUOJ the greed of Yehan(最长路 + 权值乘积转化)题解
Description During the trip, Yehan and Linlin pass a cave, and there is a board at the door, which s ...
- 启动Sql server的服务CMD命令
启动:net start mssqlserver 停止:net stop mssqlserver
- (转)Nuts and Bolts of Applying Deep Learning
Kevin Zakka's Blog About Nuts and Bolts of Applying Deep Learning Sep 26, 2016 This weekend was very ...