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. 强大的css3

    强大的css3 我们知道,这几年来智能手机的高速发展使得人们使用移动端上网的时间和人数已经超过了PC端.例如在2015年,就中国电商而言,各电商平台在移动端持续发力,移动端购物占比不断攀升,双11期间 ...

  2. ng-controller event data

    $emit只能向parent controller传递event与data $broadcast只能向child controller传递event与data $on用于接收event与data 例子 ...

  3. Sublime Text 3 快捷键整理

    选择类Ctrl+D 选中光标所占的文本,继续操作则会选中下一个相同的文本.Alt+F3 选中文本按下快捷键,即可一次性选择全部的相同文本进行同时编辑.Ctrl+L 选中整行,继续操作则继续选择下一行, ...

  4. JQuery遍历方法$.each输出函数

    each()方法能使DOM循环结构简洁,不容易出错.each()函数封装了十分强大的遍历功能,使用也很方便,它可以遍历一维数组.多维数组.DOM, JSON 等等在javaScript开发过程中使用$ ...

  5. vim 快捷键 以及技巧

    [root@centos01 biji]# vim + 1.txt 打开文件,光标定位到最后一行[root@centos01 biji]# vim +5 1.txt 打开文件,光标定位到第5行[roo ...

  6. C++ Pointer-to-Member Selector

    http://www.codeguru.com/cpp/cpp/article.php/c17401/C-Tutorial-PointertoMember-Function.htm https://m ...

  7. js与php转换时间戳

    php时间:1368524732 js代码: function getLocalTime(nS) { return new Date(parseInt(nS) * 1000).toLocaleStri ...

  8. webform中使用webapi,并且使用autofac

    private void AutofacIoCRegister() { HttpConfiguration config = GlobalConfiguration.Configuration; if ...

  9. centos 7.0 查看内存使用情况 和 查看硬盘使用情况

    在系统平时使用中 ,最重要的三个方面  内存使用 硬盘使用  CPU负载 这些 自己觉得 比较重要 1.内存使用情况   首先就是内存查看 命令free -m  -m 表示单位是M 主要看第一行Mem ...

  10. jsonp解决CORS问题

    jsonp是个机智的解决办法: 1.本地页面写个js方法 <script> function abc(data) { alert(data.result); } </script&g ...