[CF706D]Vasiliy's Multiset(异或字典树)
题目链接:http://codeforces.com/contest/706/problem/D
1 /* 2 ━━━━━┒ギリギリ♂ eye! 3 ┓┏┓┏┓┃キリキリ♂ mind! 4 ┛┗┛┗┛┃\○/ 5 ┓┏┓┏┓┃ / 6 ┛┗┛┗┛┃ノ) 7 ┓┏┓┏┓┃ 8 ┛┗┛┗┛┃ 9 ┓┏┓┏┓┃ 10 ┛┗┛┗┛┃ 11 ┓┏┓┏┓┃ 12 ┛┗┛┗┛┃ 13 ┓┏┓┏┓┃ 14 ┃┃┃┃┃┃ 15 ┻┻┻┻┻┻ 16 */ 17 #include <algorithm> 18 #include <iostream> 19 #include <iomanip> 20 #include <cstring> 21 #include <climits> 22 #include <complex> 23 #include <cassert> 24 #include <cstdio> 25 #include <bitset> 26 #include <vector> 27 #include <deque> 28 #include <queue> 29 #include <stack> 30 #include <ctime> 31 #include <set> 32 #include <map> 33 #include <cmath> 34 using namespace std; 35 #define fr first 36 #define sc second 37 #define cl clear 38 #define BUG puts("here!!!") 39 #define W(a) while(a--) 40 #define pb(a) push_back(a) 41 #define Rint(a) scanf("%d", &a) 42 #define Rll(a) scanf("%I64d", &a) 43 #define Rs(a) scanf("%s", a) 44 #define Cin(a) cin >> a 45 #define FRead() freopen("in", "r", stdin) 46 #define FWrite() freopen("out", "w", stdout) 47 #define Rep(i, len) for(int i = 0; i < (len); i++) 48 #define For(i, a, len) for(int i = (a); i < (len); i++) 49 #define Cls(a) memset((a), 0, sizeof(a)) 50 #define Clr(a, x) memset((a), (x), sizeof(a)) 51 #define Full(a) memset((a), 0x7f7f7f, sizeof(a)) 52 #define lrt rt << 1 53 #define rrt rt << 1 | 1 54 #define pi 3.14159265359 55 #define RT return 56 #define lowbit(x) x & (-x) 57 #define onenum(x) __builtin_popcount(x) 58 typedef long long LL; 59 typedef long double LD; 60 typedef unsigned long long ULL; 61 typedef pair<int, int> pii; 62 typedef pair<string, int> psi; 63 typedef pair<LL, LL> pll; 64 typedef map<string, int> msi; 65 typedef vector<int> vi; 66 typedef vector<LL> vl; 67 typedef vector<vl> vvl; 68 typedef vector<bool> vb; 69 70 const int maxn = 6006000; 71 typedef struct Node { 72 int cnt; 73 Node* next[2]; 74 Node() { cnt = 0; next[0] = next[1] = NULL; } 75 }Node; 76 77 int mul(int x, int n) { 78 int ret = 1; 79 while(n) { 80 if(n & 1) ret *= x; 81 x *= x; 82 n >>= 1; 83 } 84 return ret; 85 } 86 87 Node memory[maxn]; 88 int mcnt; 89 int q; 90 Node* rt; 91 char cmd[2]; 92 int n; 93 94 void insert(Node* p, int x) { 95 for(int i = 31; i >= 0; i--) { 96 int bit = x & (1 << i) ? 1 : 0; 97 if(p->next[bit] == NULL) { 98 p->next[bit] = &memory[mcnt++]; 99 } 100 p = p->next[bit]; 101 p->cnt++; 102 } 103 } 104 105 void remove(Node* p, int x) { 106 for(int i = 31; i >= 0; i--) { 107 int bit = x & (1 << i) ? 1 : 0; 108 p = p->next[bit]; 109 p->cnt--; 110 } 111 } 112 113 int query(Node* p, int x) { 114 int ret = 0; 115 for(int i = 31; i >= 0; i--) { 116 int bit = x & (1 << i) ? 0 : 1; 117 if(p->next[bit] && p->next[bit]->cnt >= 1) { 118 ret += mul(2, i); 119 p = p->next[bit]; 120 } 121 else p = p->next[bit^1]; 122 } 123 return ret; 124 } 125 126 int main() { 127 // FRead(); 128 while(~Rint(q)) { 129 Cls(memory); mcnt = 0; 130 rt = &memory[mcnt++]; 131 insert(rt, 0); 132 W(q) { 133 Rs(cmd); Rint(n); 134 if(cmd[0] == '+') insert(rt, n); 135 else if(cmd[0] == '-') remove(rt, n); 136 else if(cmd[0] == '?') printf("%d\n", query(rt, n)); 137 } 138 } 139 RT 0; 140 }
转载于:https://www.cnblogs.com/kirai/p/5798732.html
[CF706D]Vasiliy's Multiset(异或字典树)相关推荐
- 【CodeForces - 706D】Vasiliy's Multiset(01字典树)
题干: Author has gone out of the stories about Vasiliy, so here is just a formal task description. You ...
- Day10 堆排序、模拟堆 trie树(字典树) 并查集
堆呢就是一棵树完全二叉树... 小根堆的话,根节点就是最小值 维护堆只有两个操作 up(k) down(k) cnt是堆的大小 建堆的话只需要把前n/2的数down下来就ok 复杂度是小于O(n) 的 ...
- CodeForces - 706D Vasiliy's Multiset(字典树删除操作)
题目链接:点击查看 题目大意:给出一个正整数n,初始时有一个multiset,接下来有n次操作,实现所有操作,对于每个操作,会有三种形式: + x:向集合中添加一个 x - x:从集合中删掉一个 x ...
- trie树 Codeforces Round #367 D Vasiliy's Multiset
1 // trie树 Codeforces Round #367 D Vasiliy's Multiset 2 // 题意:给一个集合,初始有0,+表示添加元素,-去除元素,?询问集合里面与x异或最大 ...
- 奶牛异或(01字典树)
题意: 让你找一个连续区间异或和最大,如果有相同的,则输出断点较小的. 题解: 01字典树,利用前缀和的思想进行求解,我们在插入前缀的同时,也在不断的更新最大值. 我们查询当前 二进制字符串与已经插入 ...
- 3764树上的异或值(自己研究的静态字典树)
题意: 给一颗树,最多10W个点,然后每条边上都有一个权值,任意两点的权值是他们经过的边的异或值,问最大的权值是多少?(任意两点中最大的) 思路: 首先突破口是要想到a^b=c ...
- Codechef REBXOR HYSBZ - 4260(01字典树+区间异或最大)
Input 输入数据的第一行包含一个整数N,表示数组中的元素个数. 第二行包含N个整数A1,A2,-,AN. Output 输出一行包含给定表达式可能的最大值. Sample Input 5 1 2 ...
- [十二省联考 2019] 异或粽子(可持久化字典树 + 二叉堆)
problem luogu-P5283 小粽是一个喜欢吃粽子的好孩子.今天她在家里自己做起了粽子. 小粽面前有 nnn 种互不相同的粽子馅儿,小粽将它们摆放为了一排,并从左至右编号为 111 到 nn ...
- [2021-07-19 内测NOIP] 操作(状压DP),异或(字典树),等级(线段树),矩阵(DP)
[2021-07-19 内测] NOIP 操作 description solution code 异或 description solution code 等级 description soluti ...
最新文章
- SAP Cloud Platform certificate trust下载和business role创建
- python 数字转十六进制_在Python中将整数转换为十六进制
- 随想录(公司程序员的九层楼)
- final、finally、finalize 区别
- ArcView GIS 应用与开发技术(9)- 创建空间数据
- 微信小程序 图标的角标实现
- android获取当前位置的GPS经纬度
- psp android 模拟器,安卓psp模拟器
- 程序员培训班一般要多少钱?
- 从键盘上输入10个数,求其平均值。
- Hdu 1877 又一版 A+B【水题+1】
- 中计播客 | 为防止员工加班,无人机都用上了!
- 剪辑视频调整视频播放倍速,改变视频时长
- 小陈java学习笔记0817
- 李云大连理工计算机系2015级,大连理工大学计算机科学与技术学院介绍
- 【转】花开正当时,十四款120/128GB SSD横向评测
- 使用SCP传输文件报错:ssh: connect to host xx.xx.xx.xx port 22: Connection refusedlost connection
- BI方案用哪家?现在早已是国产BI工具的天下了!
- 清华大学期末复习方法
- edui 富文本编辑_富文本编辑器wangEditor添加本地上传视频功能
热门文章
- Linux 实操 —— 日志筛选操作(sed与wc命令介绍)
- python怎么引入os模块的函数_Python里的OS模块常用函数说明
- RFID 射频 RFID工作流程 自动识别技术 工作频段 短距离无线通信技术
- js java post提交_如何从Express.js发送Post请求到另一个服务器(Java)?
- vue 跳添加编辑页面传两个值_vue两个组件间值的传递或修改方式
- java编程规范每行代码窄字符,wiki/0xFE_编程规范.md at master · islibra/wiki · GitHub
- html5情人节贺卡,Web工程师的情人节卡片
- jboss mysql驱动目录_找不到mysql.jdbc.Driver – MySQL,JBoss
- .net core 正则表达式 获取 等号后面的值_Python3 正则表达式
- 前端模式 VD, 脏检查 MVVM ,数据收集 MVVM 所使用的场合