Codeforces Round #367 (Div. 2) D——Vasiliy's Multiset(异或字典树)
来源:互联网 发布:网络赛车游戏 编辑:程序博客网 时间:2024/05/19 01:07
新技能get啊。
以前都不知道这种用字典树搞。
关于字典树的入门可以看这个 http://blog.csdn.net/say_c_box/article/details/52073513
查询操作就是,找到可以让该位为1的儿子节点,向下访问。因为越高位是1数就越大嘛。
最多不过30层,所以直接建30层的树即可。
有一句一定要注意:Note, that the integer 0 will always be present in the set A.
#include <cstdio>#include <cstring>#include <string>#include <iostream>#include <algorithm>#include <vector>#include <queue>#include <set>#include <map>#include <string>#include <cmath>#include <cstdlib>using namespace std;const int MAXN =100000+10;const long long INF =100000000000007;struct node{ node *next[2]; int cnt; node(){ memset(next,NULL,sizeof(next)); cnt=0; }};node *p,*root=new node();void _insert(int x){ p=root; for(int i=30;i>=0;i--){ int num=x&(1<<i)?1:0; if(p->next[num]==NULL) p->next[num]=new node(); p=p->next[num]; p->cnt++; }}void _delete(int x){ p=root; for(int i=30;i>=0;i--){ int num=x&(1<<i)?1:0; p=p->next[num]; p->cnt--; }}int query(int x){ int res=0; p=root; for(int i=30;i>=0;i--){ int num=x&(1<<i)?0:1; node *temp; temp=p->next[num]; if(temp&&temp->cnt>0){ res+=pow(2.0,i); p=temp; } else{ p=p->next[!num]; } } return res;}int main(){ int q; _insert(0); scanf("%d",&q); getchar(); while(q--){ char op[2]; int x; scanf("%s%d",op,&x); if(op[0]=='+') _insert(x); else if(op[0]=='-') _delete(x); else printf("%d\n",query(x)); } return 0;}
0 0
- 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) D. Vasiliy's Multiset (字典树二进制)
- 【 Codeforces Round #367 (Div. 2) D】 Vasiliy's Multiset (Trie 按数位建字典树)
- Codeforces Round #367 (Div. 2) Vasiliy's Multiset 异或字典树带删除模板
- Codeforces Round #367 (Div. 2) Vasiliy's Multiset(字典树)
- 【Codeforces Round 367 (Div 2) D】【字典树典型题】Vasiliy's Multiset
- 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 (multiset)
- 字典树(Codeforces Round #367 (Div. 2) Vasiliy's Multiset,Xor问题 )
- Codeforces Round #367 (Div. 2):Vasiliy's Multiset(01字典树)
- 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 (01trie树)
- HDU-4825 Xor Sum &&Codeforces Round #367 (Div. 2) D. Vasiliy's Multiset (Trie树)
- Codeforces Round #367 (Div. 2) D. Vasiliy's Multiset 二进制树、Trie
- 64位Ubuntu 16.04运行32位程序
- 用系统数字键盘更容易实现验证码等的校验
- XMLHTTPRequest
- JavaEE程序猿之对象的使用(16)
- 1044: 数圈
- Codeforces Round #367 (Div. 2) D——Vasiliy's Multiset(异或字典树)
- 详解Python中的join()函数的用法(字符串和os.path)
- spring3.X mvc 使用Session属性的策略
- HDU 3389 Game(博弈 Nim 找规律)
- EventBus源码阅读(21)-EventBus触发
- 算法13_10种海量数据处理方法
- Linux 串口编程
- LIBVIRT报告qemu-system-x86_64: CPU feature cmt not found的解决办法
- liunx常见命令