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 ...
随机推荐
- 数据仓库基础(八)Informatica 小例子
本文转载自:http://www.cnblogs.com/evencao/p/3147843.html 之前看了一段数据库的基础,感觉自己对数据库的基础挺薄弱的.以后再学习其他东西的时候也需要经常能学 ...
- HTTP 协议入门
本文转载自:http://www.ruanyifeng.com/blog/2016/08/http.html HTTP 协议是互联网的基础协议,也是网页开发的必备知识,最新版本 HTTP/2 更是让它 ...
- Java代码质量度量工具大阅兵
FindBugs FindBugs, a program which uses static analysis to look for bugs in Java code. It is free so ...
- python3.4学习笔记(十九) 同一台机器同时安装 python2.7 和 python3.4的解决方法
python3.4学习笔记(十九) 同一台机器同时安装 python2.7 和 python3.4的解决方法 同一台机器同时安装 python2.7 和 python3.4不会冲突.安装在不同目录,然 ...
- python3.4学习笔记(七) 学习网站博客推荐
python3.4学习笔记(七) 学习网站博客推荐 深入 Python 3http://sebug.net/paper/books/dive-into-python3/<深入 Python 3& ...
- python之路----面向对象进阶一
一.isinstance和issubclass isinstance(obj,cls)检查是否obj是否是类 cls 的对象 class Foo(object): pass obj = Foo() i ...
- servlet+jsp+java实现Web应用
servlet+jsp+java实现Web应用 环境: 1,eclipse 2,tomcat3,eclipse tomcat 插件 开发过程: 1,建立一个Dynamic Web Project 2, ...
- Linux服务器上Tomcat的Web工程部署
Linux服务器上Tomcat的Web工程部署 部署Web应用到Tomcat服务器就是将开放好的JavaWeb应用打包成war包,然后发布到tomcat服务器的webapps目录下: 步骤1,先进入t ...
- redhat6.4 elasticsearch1.7.3安装配置
利用elasticsearch管理集群索引, 今天刚好需要重新调整elasticsearch的最大内存, 所以自己安装了练手 附件: elasticsearch 附件:elasticsearch-he ...
- STM32系统时钟为什么没有定义呢
对于使用3.5版本库开发的STM32学习者 有时候不清楚为什么没有时钟定义 那么我们就简单的讲解下吧: 1,函数从启动文件开始运行(汇编文件) 2,若是hd.s 请看151行LDR R0, = ...