http://codeforces.com/contest/706/problem/D

题意:
有多种操作,操作1为在字典中加入x这个数,操作2为从字典中删除x这个数,操作3为从字典中找出一个数使得与给定的数的异或值最大。

思路:

因为这道题目涉及到删除操作,所以用一个变量cnt来记录前缀的数量,加入时就+1,删除时就减1。查询时前缀数量>0时就说明是存在的。

 #include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
const int maxn = + ;
typedef long long ll;
int num = ; struct Trie
{
int son[];
int cnt;
}t[*maxn]; void init(int x)
{
t[x].cnt = ;
memset(t[x].son,,sizeof(t[x].son));
} void insert(ll x)
{
int u = ;
for(int i=;i>=;i--)
{
int c = ((x>>i)&);
if(!t[u].son[c])
{
num++;
init(num);
t[u].son[c] = num;
}
u = t[u].son[c];
t[u].cnt++;
}
} void del(ll x)
{
int u = ;
for(int i=;i>=;i--)
{
int c = ((x>>i)&);
u = t[u].son[c];
t[u].cnt--;
}
} ll query(ll x)
{
ll ans = ;
int u = ;
for(int i=;i>=;i--)
{
int c = ((x>>i)&);
if(t[u].son[c^] && t[t[u].son[c^]].cnt)
{
ans+=(<<i);
u = t[u].son[c^];
}
else u = t[u].son[c];
}
return ans;
} int main()
{
//freopen("in.txt","r",stdin);
int n;
scanf("%d",&n);
insert();
while(n--)
{
char op[]; ll x;
scanf("%s%lld",op,&x);
if(op[]=='+') insert(x);
else if(op[]=='-') del(x);
else if(op[]=='?') printf("%lld\n",query(x));
}
return ;
}

Codeforces Round #367 (Div. 2) D. Vasiliy's Multiset(01字典树求最大异或值)的更多相关文章

  1. Codeforces Round #367 (Div. 2) D. Vasiliy's Multiset

    题目链接:Codeforces Round #367 (Div. 2) D. Vasiliy's Multiset 题意: 给你一些操作,往一个集合插入和删除一些数,然后?x让你找出与x异或后的最大值 ...

  2. Codeforces Round #367 (Div. 2) D. Vasiliy's Multiset (0/1-Trie树)

    Vasiliy's Multiset 题目链接: http://codeforces.com/contest/706/problem/D Description Author has gone out ...

  3. Codeforces Round #367 (Div. 2) D. Vasiliy's Multiset Trie

    题目链接: http://codeforces.com/contest/706/problem/D D. Vasiliy's Multiset time limit per test:4 second ...

  4. Codeforces Round #367 (Div. 2) D. Vasiliy's Multiset(可持久化Trie)

    D. Vasiliy's Multiset time limit per test 4 seconds memory limit per test 256 megabytes input standa ...

  5. Codeforces Round #367 (Div. 2)D. Vasiliy's Multiset (字典树)

    D. Vasiliy's Multiset time limit per test 4 seconds memory limit per test 256 megabytes input standa ...

  6. Codeforces Round #367 (Div. 2) D. Vasiliy's Multiset trie树

    D. Vasiliy's Multiset time limit per test 4 seconds memory limit per test 256 megabytes input standa ...

  7. Codeforces #367 (Div. 2) D. Vasiliy's Multiset (trie 树)

    http://codeforces.com/group/1EzrFFyOc0/contest/706/problem/D 题目:就是有3种操作 + x向集合里添加 x - x 删除x元素,(保证存在 ...

  8. Codeforces Round #311 (Div. 2) E - Ann and Half-Palindrome(字典树+dp)

    E. Ann and Half-Palindrome time limit per test 1.5 seconds memory limit per test 512 megabytes input ...

  9. Codeforces Round #367 (Div. 2)---水题 | dp | 01字典树

    A.Beru-taxi 水题:有一个人站在(sx,sy)的位置,有n辆出租车,正向这个人匀速赶来,每个出租车的位置是(xi, yi) 速度是 Vi;求人最少需要等的时间: 单间循环即可: #inclu ...

随机推荐

  1. Linux基础命令---arch

    Arch         Arch指令主要用于显示当前主机的硬件结构类型,我们可以看到它输出的结果有:i386.i486.mips.alpha等.此命令的适用范围:RedHat.RHEL.Ubuntu ...

  2. ASP.NET定时调用WebService 运行后台代码

    效果: 通过在网站的Global.asax的Application_Start方法中 加入定时器 定时调用WebService 该WebService的一个方法 负责在后台 向数据库的某个表加入数据 ...

  3. sparkStrming 实时插入 mysql 今天使用echart 实现了简单数据展示 很low 但学习必须加深

  4. 监控nginx服务

    转自:http://www.cnblogs.com/silent2012/p/5310500.html 在Nginx的插件模块中有一个模块stub_status可以监控Nginx的一些状态信息,默认安 ...

  5. 初学delphi

    今天女朋友的一门课,要求用delphi 软件编程,内容是一个计算器.当然,这个工作肯定是落在我的头上了. 这个软件是我第一次使用,边自学边进行代码编写,在n多次修改完善之后,终于成形.功能不是很多,跟 ...

  6. The Little Prince-11/26

    WRITE BEFORE THE BOOK REVIEW I have read The Little Prince for three or four times. However I still ...

  7. mysql数据库介绍

    一.数据库概述 二.MySql安装和基本管理 三.mysql基本语句 四.库的操作 五.表的操作 六.数据类型 七.数据类型二 八.完整性约束 九.外键的变种 三种关系 十.数据的增删改 十一.多表查 ...

  8. Harmonic Value Description HDU - 5916

    The harmonic value of the permutation p1,p2,⋯pn is ∑i=1n−1gcd(pi.pi+1) Mr. Frog is wondering about t ...

  9. Android 新老两代 Camera API 大起底

    https://blog.csdn.net/Byeweiyang/article/details/80515192 0.背景简介 最近有一部分相机相关的需求,专注于对拍摄的照片.视频的噪点.色温.明暗 ...

  10. PostgreSQL 10首个测试版本发布

    mysql 从5.7到8.0,pg从9.6到10,干起来了.. PostgreSQL 10 的首个测试版发布了,此版本包含 PostgreSQL 10 最终将提供的所有功能的预览.当然,有些细节将在最 ...