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——平衡树的更多相关文章

  1. [BZOJ3223]Tyvj 1729 文艺平衡树

    [BZOJ3223]Tyvj 1729 文艺平衡树 试题描述 您需要写一种数据结构(可参考题目标题),来维护一个有序数列,其中需要提供以下操作:翻转一个区间,例如原有序序列是5 4 3 2 1,翻转区 ...

  2. [BZOJ3224]Tyvj 1728 普通平衡树

    [BZOJ3224]Tyvj 1728 普通平衡树 试题描述 您需要写一种数据结构(可参考题目标题),来维护一些数,其中需要提供以下操作:1. 插入x数2. 删除x数(若有多个相同的数,因只删除一个) ...

  3. BZOJ3223: Tyvj 1729 文艺平衡树 [splay]

    3223: Tyvj 1729 文艺平衡树 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 3595  Solved: 2029[Submit][Sta ...

  4. [普通平衡树treap]【学习笔记】

    3224: Tyvj 1728 普通平衡树 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 9046  Solved: 3840[Submit][Sta ...

  5. BZOJ 3224: Tyvj 1728 普通平衡树

    3224: Tyvj 1728 普通平衡树 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 9629  Solved: 4091[Submit][Sta ...

  6. BZOJ 3223: Tyvj 1729 文艺平衡树

    3223: Tyvj 1729 文艺平衡树 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 3628  Solved: 2052[Submit][Sta ...

  7. 【Splay】bzoj3223-Tyvj1729文艺平衡树

    一.题目 Description 您需要写一种数据结构(可参考题目标题),来维护一个有序数列,其中需要提供以下操作:翻转一个区间,例如原有序序列是5 4 3 2 1,翻转区间是[2,4]的话,结果是5 ...

  8. hiho #1329 : 平衡树·Splay

    #1329 : 平衡树·Splay 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Ho:小Hi,上一次你跟我讲了Treap,我也实现了.但是我遇到了一个关键的问题. ...

  9. bzoj 3196: Tyvj 1730 二逼平衡树

    #include<cstdio> #include<ctime> #include<cstdlib> #include<iostream> #defin ...

随机推荐

  1. JavaScript事件类型

    JavaScript事件类型 Web浏览器中可能发生的事件有很多类型.这里我将主要将下面几种常用的事件类型: UI事件 焦点事件 鼠标与滚轮事件 键盘与文本事件 复合事件 变动事件 HTML5事件 设 ...

  2. ubuntu 远程开机

    启动者(电脑A)  ----------->  被远程开启的电脑(电脑B) 一.被远程开启的电脑(电脑B):1. 重新开机,并进到BIOS设定2. 把Wake On Land / Wake On ...

  3. Python实现打印二叉树某一层的所有节点

    不多说,直接贴程序,如下所示 # -*- coding: utf-8 -*- # 定义二叉树节点类 class TreeNode(object): def __init__(self,data=0,l ...

  4. Mysql数据库设置定时任务

    最近手头在做一个拍卖的电商项目. 中间需要将到点的拍卖会状态设置为进行中. 我们的解决方案是Mysql的定时器任务,这里进行一个简单的总结. 1.使用范围 不是所有的MySQL版本都支持,Mysql ...

  5. linux查看java jdk安装路径和设置环境变量

    一:查看类型 windows: set java_home:查看JDK安装路径 java -version:查看JDK版本 linux: whereis java which java (java执行 ...

  6. WSAStartup

    WSAStartup,是Windows Sockets Asynchronous的启动命令.Windows下的网络编程接口软件 Winsock1 或 Winsock2 里面的一个命令. 外文名 WSA ...

  7. oc面向对象特性: 多态

    多态:不同对象以自己的方式响应相同的消息的能力叫做多态.   多态的主要好处就是简化了编程接口.在类与类之间可以重复命名. 下面的例子是一个彩色打印机和黑白打印机这两种打印机,然后Person类中有一 ...

  8. 使用ASP.NET Web Api构建基于REST风格的服务实战系列教程【九】——API变了,客户端怎么办?

    系列导航地址http://www.cnblogs.com/fzrain/p/3490137.html 前言 一旦我们将API发布之后,消费者就会开始使用并和其他的一些数据混在一起.然而,当新的需求出现 ...

  9. 使用 Object.create 创建对象,super 关键字,class 关键字

    ECMAScript 5 中引入了一个新方法:Object.create().可以调用这个方法来创建一个新对象.新对象的原型就是调用 create 方法时传入的第一个参数: var a = {a: 1 ...

  10. JAVA JLabel自定义子类无法显示

    import java.awt.*; import java.util.Scanner; import javax.swing.*; public class Test_16_13 extends J ...