ACdream1063——平衡树
1、题目大意:让你设计一种数据结构,支持插入一个数,和在这个结构里查询结构中的哪个数和给定的数的异或值最小
2、分析:这个怎么做呢,就是trie树,我们建立一个trie树,把树按01进制存进去,然后在查询的时候,
我们就贪心的在trie树的一直走
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <algorithm>
using namespace std;
struct Trie{
int ch[1000000][3];
int num;
inline void insert(int k){
int u = 0;
for(int i = 30; i >= 0; i --){
int s = ((1 << i) & k);
if(s){
if(!ch[u][1]){
num ++;
ch[u][1] = num;
}
u = ch[u][1];
}
else{
if(!ch[u][0]){
num ++;
ch[u][0] = num;
}
u = ch[u][0];
}
}
return;
}
inline int qmin(int k){
int u = 0;
int ret = 0;
for(int i = 30; i >= 0; i --){
int s = ((1 << i) & k);
if(s) {
if(ch[u][1]){
u = ch[u][1];
ret += (1 << i);
}
else{
u = ch[u][0];
}
}
else{
if(ch[u][0]){
u = ch[u][0];
}
else{
u = ch[u][1];
ret += (1 << i);
}
}
}
return ret;
}
inline int qmax(int k){
int u = 0;
int ret = 0;
for(int i = 30; i >= 0; i --){
int s = ((1 << i) & k);
if(s) {
if(ch[u][0]){
u = ch[u][0];
}
else{
u = ch[u][1];
ret += (1 << i);
}
}
else{
if(ch[u][1]){
u = ch[u][1];
ret += (1 << i);
}
else{
u = ch[u][0];
}
}
}
return ret;
}
} wt;
int main(){
int T;
scanf("%d", &T);
while(T --){
memset(wt.ch, 0, sizeof(wt.ch));
wt.num = 0;
int n;
scanf("%d", &n);
char str[10];
int k;
for(int i = 1; i <= n; i ++){
scanf("%s", str);
scanf("%d", &k);
if(str[2] == 's'){
wt.insert(k);
}
else if(str[2] == 'i'){
int ans = wt.qmin(k);
printf("%d\n", ans^k);
}
else {
int ans = wt.qmax(k);
printf("%d\n", ans^k);;
}
}
}
return 0;
}
ACdream1063——平衡树的更多相关文章
- [BZOJ3223]Tyvj 1729 文艺平衡树
[BZOJ3223]Tyvj 1729 文艺平衡树 试题描述 您需要写一种数据结构(可参考题目标题),来维护一个有序数列,其中需要提供以下操作:翻转一个区间,例如原有序序列是5 4 3 2 1,翻转区 ...
- [BZOJ3224]Tyvj 1728 普通平衡树
[BZOJ3224]Tyvj 1728 普通平衡树 试题描述 您需要写一种数据结构(可参考题目标题),来维护一些数,其中需要提供以下操作:1. 插入x数2. 删除x数(若有多个相同的数,因只删除一个) ...
- BZOJ3223: Tyvj 1729 文艺平衡树 [splay]
3223: Tyvj 1729 文艺平衡树 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 3595 Solved: 2029[Submit][Sta ...
- [普通平衡树treap]【学习笔记】
3224: Tyvj 1728 普通平衡树 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 9046 Solved: 3840[Submit][Sta ...
- BZOJ 3224: Tyvj 1728 普通平衡树
3224: Tyvj 1728 普通平衡树 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 9629 Solved: 4091[Submit][Sta ...
- BZOJ 3223: Tyvj 1729 文艺平衡树
3223: Tyvj 1729 文艺平衡树 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 3628 Solved: 2052[Submit][Sta ...
- 【Splay】bzoj3223-Tyvj1729文艺平衡树
一.题目 Description 您需要写一种数据结构(可参考题目标题),来维护一个有序数列,其中需要提供以下操作:翻转一个区间,例如原有序序列是5 4 3 2 1,翻转区间是[2,4]的话,结果是5 ...
- hiho #1329 : 平衡树·Splay
#1329 : 平衡树·Splay 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Ho:小Hi,上一次你跟我讲了Treap,我也实现了.但是我遇到了一个关键的问题. ...
- bzoj 3196: Tyvj 1730 二逼平衡树
#include<cstdio> #include<ctime> #include<cstdlib> #include<iostream> #defin ...
随机推荐
- mysql-python
sudo pip install MySQL-python centos安装 python-dev包提示No package python-dev available: 出现此问题的原因是python ...
- Java数据结构——优先级队列
//================================================= // File Name : PriorityQueue_demo //------------ ...
- notification的使用
示例: NotificationManager nm = (NotificationManager)getSystemService(Context.NOTIFICATION_SERVICE); No ...
- Fragment碎片的创建和动态更新
Fragment,在平板应用中较为参见,把视图分为两个甚至多个模块. 一,一个简单的fragment 1.创建两个局部文件,用于等待被调用 (1)left_fragment (2)right_frag ...
- css媒体查询
简单解释:http://zh.learnlayout.com/media-queries.html 深入学习1:https://developer.mozilla.org/en-US/docs/Web ...
- 学海无涯的整理Ing..........
1.文章:Understanding JavaScript Function Invocation and “this” http://yehudakatz.com/2011/08/11/unders ...
- Python开发【第三篇】:Python基本数据类型
运算符 1.算数运算: 2.比较运算: 3.赋值运算: 4.逻辑运算: 5.成员运算: 基本数据类型 1.数字 int(整型) 在32位机器上,整数的位数为32位,取值范围为-2**31-2**31- ...
- Mongodb 资源
一.资源 1.C# 驱动下载地址 https://github.com/mongodb/mongo-csharp-driver/releases 2. Mongodb 管理工具 mongochef 下 ...
- 【8-30】oracle数据库学习
oracle安装:将两个文件合并 全局用户:achievec 口令:Admin123456 用户:scott 口令:tiger oracle开发工具: sqlplusw 和sqlplus和pl/sql ...
- Java通过JNI调用C
Java调用C有多种方式,本文介绍笔者最近的学习过程,避免今后再犯类似的错误. 首先,Java肯定是调用C的动态链接库,即通过编译器编译后的dll/so文件. 下面介绍gcc编译dll的方法. 一般情 ...