博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Codeforces Round #367 (Div. 2) Vasiliy's Multiset 异或字典树带删除模板
阅读量:4957 次
发布时间:2019-06-12

本文共 1446 字,大约阅读时间需要 4 分钟。

多重集版的异或字典树,拿之前的板子瞎改了改居然能用,看来功能理解得没错。。

莫名wa7,回忆一波代码意义之后感觉没问题啊

读读题发现这个多重集里居然永远有0

。。。

赛中能debug出来还是挺开心的

#include
//#pragma comment(linker, "/STACK:1024000000,1024000000") #include
#include
#include
#include
#include
#include
#include
#include
#include
#include
using namespace std; #define ll long long #define pb push_back #define FOR(a) for(int i=1;i<=a;i++) const int inf=0x3f3f3f3f; const int maxn=2e5+9; const int maxnode=32*maxn; int ch[maxnode][2]; int val[maxnode]; int vis[maxnode];int sz; void init(){memset(ch[0],0,sizeof ch[0]);sz=1;} void insert(int num){ int now=0; for(int i=30;i>=0;i--){ int c=(num>>i)&1; if(!ch[now][c]){ memset(ch[sz],0,sizeof ch[sz]); val[sz]=0; vis[sz]=0; ch[now][c]=sz++; } now=ch[now][c]; vis[now]++; } val[now]=num; } void del(int num){ int now=0; for(int i=30;i>=0;i--){ int c=(num>>i)&1; now=ch[now][c]; vis[now]--; }}int query(int num){ int now=0; for(int i=30;i>=0;i--){ int c=(num>>i)&1; if(ch[now][c^1] && vis[ch[now][c^1]])now=ch[now][c^1]; else if(vis[ch[now][c]])now=ch[now][c]; else{ return 0; } } return val[now]; } char op[5];int num;int main(){ init(); int n;scanf("%d",&n); while(n--){ scanf("%s%d",op,&num); if(op[0]=='+')insert(num); else if(op[0]=='-')del(num); else printf("%d\n",max(num,num^query(num))); }}

转载于:https://www.cnblogs.com/Drenight/p/8611218.html

你可能感兴趣的文章
[mysql相关集锦] 001 - mysql zip安装/The service already exists/MySQL 服务无法启动
查看>>
[功能集锦] 003 - 一键生成mysql数据字典/数据库速查表
查看>>
[功能集锦] 002 - mysql查询数据库字典+导出+样式一键整合至excel
查看>>
《用户故事与敏捷方法》 笔记
查看>>
Virtual box安装回退的一系列可能的原因及解决办法
查看>>
SVN服务器端和客户端的搭建与使用
查看>>
Java在当前时间的基础上增加N时间
查看>>
JAVA中一些定时器的使用
查看>>
面向对象6大设计原则
查看>>
利用接口实现打印机案例
查看>>
输出课程名称
查看>>
使用throw抛出年龄异常
查看>>
根据学员英文名找到学员对象
查看>>
随机生成6位的字符串验证码,要求包含数字、大小写字母
查看>>
输出学习阶段目标
查看>>
Java面试题- Java基础
查看>>
随机生成20个手机号码(1开头)
查看>>
通过继承Thread类的方式创建线程
查看>>
模拟多人爬山
查看>>
测试3---将字符串压缩算法
查看>>