Codeforces Round #367 (Div. 2) D Vasiliy's Multiset(01Trie)
来源:互联网 发布:淘宝初始流量为0 编辑:程序博客网 时间:2024/05/19 00:09
字典树裸题。之前做过类似的,把代码拿过来提交,居然wa了。调了半天,发现以前的代码,是错的。。。
把每个数字的二进制,扩充到31位,然后插入字典树。对于当前的数,对于他的每一位,每次在树中匹配和他相反的那一位,从高位到低位匹配。最后得到的就是异或最大值。
#include <bits/stdc++.h>using namespace std;const int MAXN = 2e5+10;struct MyTrie{ int next[MAXN*32][2]; int cnt[MAXN*32]; int root,sz; void init() { memset(next,-1,sizeof(next)); memset(cnt,0,sizeof(cnt)); root = sz = 0; } void insert(int num) { int now = root; for(int i = 30; i >= 0; --i) { int t = (num>>i)&1; if(next[now][t] == -1) next[now][t] = ++sz; cnt[next[now][t]]++; now = next[now][t]; } } void erase(int num) { int now = root; for(int i = 30; i >= 0; --i) { int t = (num>>i)&1; cnt[next[now][t]]--; int pre = next[now][t]; if(cnt[next[now][t]] == 0) next[now][t] = -1; now = pre; } } int query(int num) { int ret = 0,t; int now = root; for(int i = 30; i >= 0; --i) { t = (num>>i)&1; if(next[now][!t] != -1) { t = !t; ret |= (1<<i); } else if(next[now][t] != -1) ret |= (0<<i); else return num; now = next[now][t]; } return ret; }}Trie;int main(){ int q; scanf("%d",&q); char op; int num; Trie.init(); Trie.insert(0); while(q--) { scanf(" %c %d",&op,&num); if(op == '+') Trie.insert(num); else if(op == '-') Trie.erase(num); else printf("%d\n",Trie.query(num)); } return 0;}
阅读全文
0 0
- Codeforces Round #367 (Div. 2) D Vasiliy's Multiset(01Trie)
- Codeforces Round #367 (Div. 2) D. Vasiliy's Multiset (01trie树)
- 【 Codeforces Round #367 (Div. 2) D】 Vasiliy's Multiset (Trie 按数位建字典树)
- Codeforces Round #367 (Div. 2) D. Vasiliy's Multiset (multiset)
- Codeforces Round #367 (Div. 2) Vasiliy's Multiset xor trie
- HDU-4825 Xor Sum &&Codeforces Round #367 (Div. 2) D. Vasiliy's Multiset (Trie树)
- Codeforces Round #367 (Div. 2) D. Vasiliy's Multiset 二进制树、Trie
- Codeforces Round #367 (Div. 2) [D] Vasiliy's Multiset(01字典树模板)
- Codeforces Round #367 (Div. 2) D——Vasiliy's Multiset(异或字典树)
- Codeforces Round #367 (Div. 2) D Vasiliy's Multiset(字典树)
- Codeforces Round #367 (Div. 2) D. Vasiliy's Multiset (tire 树)
- Codeforces Round #367 (Div. 2) D. Vasiliy's Multiset(字典树模板)
- Codeforces Round #367 (Div. 2) D Vasiliy's Multiset(查找树)
- Codeforces Round #367 (Div. 2) D. Vasiliy's Multiset (字典树二进制)
- Codeforces Round #367 (Div. 2)-Vasiliy's Multiset-最大异或和-trie
- Codeforces Round #367 D. Vasiliy's Multiset
- Codeforces Round #367 (Div. 2):Vasiliy's Multiset(01字典树)
- Codeforces Round #367 (Div. 2) Vasiliy's Multiset(字典树)
- zepto.js自定义打包集成其它模块构建流程
- 文章标题
- Weex 动态Modal设计
- Linux清屏
- leetcode 368. Largest Divisible Subset
- Codeforces Round #367 (Div. 2) D Vasiliy's Multiset(01Trie)
- java注解:学习注解的好处和JDK提供的三种基本注解
- SSM框架搭建详细解析
- 2017年总结
- C语言char*字符串数组和unsigned char[]数组的相互转换
- 卷积
- 在ubuntu下webstorm的卸载
- 预编码技术
- 所需要的资料收集