817E. Choosing The Commander trie字典树
题意:现有3种操作 加入一个值,删除一个值,询问pi^x<k的个数
思路:很像以前lightoj上写过的01异或的字典树,用字典树维护数求异或值即可
/** @Date : 2017-07-02 18:58:02
* @FileName: 817E trie.cpp
* @Platform: Windows
* @Author : Lweleth (SoungEarlf@gmail.com)
* @Link : https://github.com/
* @Version : $Id$
*/
#include <bits/stdc++.h>
#define LL long long
#define PII pair
#define MP(x, y) make_pair((x),(y))
#define fi first
#define se second
#define PB(x) push_back((x))
#define MMG(x) memset((x), -1,sizeof(x))
#define MMF(x) memset((x),0,sizeof(x))
#define MMI(x) memset((x), INF, sizeof(x))
using namespace std; const int INF = 0x3f3f3f3f;
const int N = 1e6+20;
const double eps = 1e-8; int a[N*4][3];
int sum[N*4];
int cnt = 0; void ope(int x, int f)
{
int bit[32];
MMF(bit);
int len = 0;
while(x)
{
bit[len++] = x % 2;
x >>= 1;
}
int np = 0;
for(int i = 31; i >= 0; i--)
{
if(!a[np][bit[i]])
a[np][bit[i]] = ++cnt;
np = a[np][bit[i]];
sum[np] += f;
}
} int query(int x, int k)
{
int bit[32], tmp[32];
MMF(bit);
MMF(tmp);
int len = 0;
while(x)
{
bit[len++] = x % 2;
x >>= 1;
}
len = 0;
while(k)
{
tmp[len++] = k % 2;
k >>= 1;
} int np = 0;
int res = 0;
for(int i = 31; i >= 0; i--)
{
if(!tmp[i] && !a[np][bit[i]])
break;
if(tmp[i]==0)
np = a[np][bit[i]];
else
{
if(a[np][bit[i]])
res += sum[a[np][bit[i]]];
if(a[np][!bit[i]] == 0)
break;
np = a[np][!bit[i]];
}
}
return res;
} int main()
{
int q;
while(cin >> q)
{
MMF(sum);
while(q--)
{
int x, y;
scanf("%d%d", &x, &y);
if(x == 1)
ope(y, 1);
else if(x == 2)
ope(y, -1);
else if(x == 3)
{
int k;
scanf("%d", &k);
printf("%d\n", query(y, k));
}
}
}
return 0;
}
//要求有异或操作 为了快速运算 使用trie字典树保存每个人对应二进制位上的数字
//并存入sum[]中
//注意空间1e5*32位以上
817E. Choosing The Commander trie字典树的更多相关文章
- 萌新笔记——C++里创建 Trie字典树(中文词典)(一)(插入、遍历)
萌新做词典第一篇,做得不好,还请指正,谢谢大佬! 写了一个词典,用到了Trie字典树. 写这个词典的目的,一个是为了压缩一些数据,另一个是为了尝试搜索提示,就像在谷歌搜索的时候,打出某个关键字,会提示 ...
- Trie字典树 动态内存
Trie字典树 #include "stdio.h" #include "iostream" #include "malloc.h" #in ...
- 算法导论:Trie字典树
1. 概述 Trie树,又称字典树,单词查找树或者前缀树,是一种用于快速检索的多叉树结构,如英文字母的字典树是一个26叉树,数字的字典树是一个10叉树. Trie一词来自retrieve,发音为/tr ...
- 标准Trie字典树学习二:Java实现方式之一
特别声明: 博文主要是学习过程中的知识整理,以便之后的查阅回顾.部分内容来源于网络(如有摘录未标注请指出).内容如有差错,也欢迎指正! 系列文章: 1. 标准Trie字典树学习一:原理解析 2.标准T ...
- C++里创建 Trie字典树(中文词典)(一)(插入、遍历)
萌新做词典第一篇,做得不好,还请指正,谢谢大佬! 写了一个词典,用到了Trie字典树. 写这个词典的目的,一个是为了压缩一些数据,另一个是为了尝试搜索提示,就像在谷歌搜索的时候,打出某个关键字,会提示 ...
- 数据结构 -- Trie字典树
简介 字典树:又称单词查找树,Trie树,是一种树形结构,是一种哈希树的变种. 优点:利用字符串的公共前缀来减少查询时间,最大限度地减少无谓的字符串比较,查询效率比哈希树高. 性质: 1. 根节 ...
- 踹树(Trie 字典树)
Trie 字典树 ~~ 比 KMP 简单多了,无脑子选手学不会KMP,不会结论题~~ 自己懒得造图了OI WIKI 真棒 字典树大概长这么个亚子 呕吼真棒 就是将读进去的字符串根据当前的字符是什么和所 ...
- trie字典树详解及应用
原文链接 http://www.cnblogs.com/freewater/archive/2012/09/11/2680480.html Trie树详解及其应用 一.知识简介 ...
- Trie字典树 静态内存
静态字典树 看了好久的字典树,挺简单的一个结构,愣是看了这么久才写出来... 专心一点就不会这样了.... 接下来就去刷刷字典树的题吧....... 下面是字典树.... 定义节点 typedef s ...
随机推荐
- 第二次程序+PSP0级
第二周,老师接着上次的程序有对四则运算的程序,做出来一些要求,这次要求可以控制乘除法,有无括号,控制输出方式,控制结果有无负数,有无余数. 我在对原先的程序分析了一下,发现我原先的程序可扩展性特别差, ...
- Alpha冲刺——第八天
Alpha第八天 听说 031502543 周龙荣(队长) 031502615 李家鹏 031502632 伍晨薇 031502637 张柽 031502639 郑秦 1.前言 任务分配是VV.ZQ. ...
- lintcode-425-电话号码的字母组合
425-电话号码的字母组合 Given a digit string excluded 01, return all possible letter combinations that the num ...
- MySQL 基于lvm2的备份实战演练 (快照备份)
前言: lvm2实现热备的原理是基于lvm2的快照功能,lvm2可以实现数据集不大的情况下的热备. 实战过程如下:这里的演示是在一台Mariadb服务器上进行创建快照,将快照中的文件scp到备份服务器 ...
- C++11 锁 lock
转自:https://www.cnblogs.com/diegodu/p/7099300.html 互斥(Mutex: Mutual Exclusion) 下面的代码中两个线程连续的往int_set中 ...
- 关于WPS页面横向问题
上图 即可进行横向竖向页面设置
- SQL中 ALL 和 ANY 区别的
在select中我们可能会认为all和any应该表达的意思差不多.其实他们的意思完全不一样: all: 是将后面的内容看成一个整体,如: >all (select age from studen ...
- MachineLearning ---- lesson 2 Linear Regression with One Variable
Linear Regression with One Variable model Representation 以上篇博文中的房价预测为例,从图中依次来看,m表示训练集的大小,此处即房价样本数量:x ...
- request之setAtrribute
当在servlet中有request.SetAtrribute("AtriruteName",AtrributeValue)语句时,在jsp页面获取AtrributeValue有两 ...
- [您有新的未分配科技点] 无旋treap:从单点到区间(例题 BZOJ1500&NOI2005 维护数列 )
1500: [NOI2005]维修数列 Time Limit: 10 Sec Memory Limit: 64 MB Description Input 输入的第1 行包含两个数N 和M(M ≤20 ...