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 ...
随机推荐
- chown -R命令的使用
chown将指定文件的拥有者改为指定的用户或组,用户可以是用户名或者用户ID:组可以是组名或者组ID:文件是以空格分开的要改变权限的文件列表,支持通配符.系统管理员经常使用chown命令,在将文件拷贝 ...
- eclipse的一些常见操作
调整字体大小:Window-Preferences-General-Appearance-Colors and Fonts-Basic-Text Font
- matlab和C/C++混合编程--Mex
最近的项目需要matlab和C的混合编程,经过一番努力终于完成了项目要解决的问题.现在就将Mex的一些经验总结一下,当然只是刚刚开始,以后随着学习的深入继续添加.首先讲讲写Mex的一些常规规定,然后我 ...
- IBatis分页显示
<select id="pagedListOrderOpen"> SELECT * FROM ( </select> <sql id="pa ...
- C#------DateTime自定义格式
var text = Convert.ToString(DateTime.Now.ToString("yyyy/MM/dd"));
- SSH原理与运用(一):远程登录
SSH是每一台Linux电脑的标准配置. 随着Linux设备从电脑逐渐扩展到手机.外设和家用电器,SSH的使用范围也越来越广.不仅程序员离不开它,很多普通用户也每天使用. SSH具备多种功能,可以用于 ...
- C#----使用WindowsMediaPlayer 同时播放多个声音
使用Windows Media Player 其实就是使用组件AxWindowsMediaPlayer. 添加两个引用:Interop.WMPLib.dll和AxInterop.WMPLib.dll. ...
- 404. Sum of Left Leaves
Find the sum of all left leaves in a given binary tree. 左树的值(9+15=24) /** * Definition for a binary ...
- XML简介
xml的简介(了解) * eXtensible Markup Language:可扩展标记型语言 ** 标记型语言:html是标记型语言 ...
- AngularJS常用指令用法详解
ng-class 1>ng-init ng-bind 11111 2>ng-class 111 3>ng-repeat 3.1-数据绑定 ng-repeat可以绑定数组和 ...