#include<cstdio>
const int N = 1e6 + 5; struct Trie{
int root, id;
bool bit[32]; struct Node{
int val, siz, ch[2];
Node(){ ch[0] = ch[1] = -1, val = siz = 0; }
}node[N]; void get(int x){
for(int i = 0; i < 32; ++i, x >>= 1) bit[i] = x & 1;
} void init(){
for(int i = 0; i <= id; ++i){
node[i].ch[0] = node[i].ch[1] = -1;
node[i].val = node[i].siz = 0;
}
id = root = 0;
} void insert(int x){
get(x);
int u = root;
for(int i = 31; i >= 0; --i){
if(node[u].ch[bit[i]] == -1) node[u].ch[bit[i]] = ++id;
u = node[u].ch[bit[i]];
++node[u].siz;
}
node[u].val = x;
} int find(int x){ // 返回与x异或最大的数
get(x);
int u = root;
for(int i = 31; i >= 0; --i){
int s1 = node[u].ch[!bit[i]], s2 = node[u].ch[bit[i]];
if(s1 != -1 && node[s1].siz > 0) u = s1;
else if(s2 != -1 && node[s2].siz > 0) u = s2;
else return x; // 注意根据需要调整返回值
}
return node[u].val;
} void del(int x){
get(x);
int u = root;
for(int i = 31; i >= 0; --i){
u = node[u].ch[bit[i]];
--node[u].siz;
}
}
}trie;

【封装】Trie的更多相关文章

  1. Trie(字典树)解析及其在编程竞赛中的典型应用举例

    摘要: 本文主要讲解了Trie的基本思想和原理,实现了几种常见的Trie构造方法,着重讲解Trie在编程竞赛中的一些典型应用. 什么是Trie? 如何构建一个Trie? Trie在编程竞赛中的典型应用 ...

  2. 洛谷.3065.第一!First!(Trie 拓扑)

    题目链接 \(Description\) 给出n个字符串,问重定义英文字符的顺序(即字典序),有哪些单词可能排在第一 \(Solution\) 一个单词想要排在第一,首先是没有其它字符串是它的前缀.那 ...

  3. python Trie树和双数组TRIE树的实现. 拥有3个功能:插入,删除,给前缀智能找到所有能匹配的单词

    #coding=utf- #字典嵌套牛逼,别人写的,这样每一层非常多的东西,搜索就快了,树高26.所以整体搜索一个不关多大的单词表 #还是O(). ''' Python 字典 setdefault() ...

  4. 学习笔记:安装swig+用SWIG封装C++为Python模块+SWIG使用说明

    这段时间一直在摸索swing,用它来封装C++代码来生成python脚步语言.并总结了swing从安装到配置再到代码封装编译生成动态库的整个过程,下面这篇文章都是我在实际的运用中的一些经验总结,分享给 ...

  5. Trie树的插入,查前缀,查单词,删前缀和删单词。

    这个Trie原先用C++就敲得很熟了,看了蓝桥杯的视频后学会把一个功能这样封装起来,以后用的时候就很爽可以直接调用了,所以就用Java写了: public class Trie { private f ...

  6. 数据结构 | 30行代码,手把手带你实现Trie树

    本文始发于个人公众号:TechFlow,原创不易,求个关注 今天是算法和数据结构专题的第28篇文章,我们一起来聊聊一个经典的字符串处理数据结构--Trie. 在之前的4篇文章当中我们介绍了关于博弈论的 ...

  7. 算法总结篇---字典树(Trie)

    目录 写在前面 具体实现 引例: 引例代码: 例题 Phone List Solution: The XOR Largest Pair Solution L语言 Solution: 写在前面 字典树是 ...

  8. [C#] 简单的 Helper 封装 -- RegularExpressionHelper

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...

  9. iOS开发之App间账号共享与SDK封装

    上篇博客<iOS逆向工程之KeyChain与Snoop-it>中已经提到了,App间的数据共享可以使用KeyChian来实现.本篇博客就实战一下呢.开门见山,本篇博客会封装一个登录用的SD ...

  10. Ajax实现原理,代码封装

    都知道实现页面的异步操作需要使用Ajax,那么Ajax到是怎么实现异步操作的呢? 首先需要认识一个对象 --> XMLHttpRequest 对象 --> Ajax的核心.它有许多的属性和 ...

随机推荐

  1. 21.1 使用PEfile分析PE文件

    PeFile模块是Python中一个强大的便携式第三方PE格式分析工具,用于解析和处理Windows可执行文件.该模块提供了一系列的API接口,使得用户可以通过Python脚本来读取和分析PE文件的结 ...

  2. 三维模型OSGB格式轻量化的数据压缩与性能平衡分析

    三维模型OSGB格式轻量化的数据压缩与性能平衡分析 在三维模型应用中,OSGB格式轻量化处理是一种常见的技术手段,它可以通过数据压缩.简化.滤波等操作,降低三维模型数据的存储空间和传输带宽需求,提高应 ...

  3. 万字长文硬核AQS源码分析

    阅读本文前,需要储备的知识点如下,点击链接直接跳转. java线程详解 Java不能操作内存?Unsafe了解一下 一文读懂LockSupport AQS简介 AQS即AbstractQueuedSy ...

  4. 探索ChatGPT的Fine-tuning和Embeddings

    1.概述 今天我们将深入探索ChatGPT的两项核心技术:Fine-tuning(微调)和Embeddings(嵌入).这些技术在现代自然语言处理领域扮演着至关重要的角色,为模型的性能提升和适应特定任 ...

  5. HDU 1171 0-1背包

    最近感觉DP已经完全忘了..各种爆炸,打算好好复习一发,0-1背包开始 Big Event in HDU Problem Description Nowadays, we all know that ...

  6. Spring中事务的传播行为有哪些?

    Spring中事务的传播行为有哪些? 现在我们来谈一个场景,再来引出事务传播行为这个概念.现在有methodA( ) 和 methodB( ),而且两个方法都显示的开启了事务,那么methodB( ) ...

  7. Microsoft Build 2021第二天

    C++20 Ranges are complete in Visual Studio 2019 version 16.10 https://devblogs.microsoft.com/cppblog ...

  8. window 安装多个低版本chrome测试

    最近在用next13做一个简单的项目,需要兼容chrome 60+以上版本,为了方便测试,特意在公司的台式机上安装了低版本. 这里简单记录下高版本覆盖低版本的问题,这个方法不影响Windows系统内已 ...

  9. Solution -「营业」「CF 527C」Glass Carving

    Description Link. 有一个块 \(n\times m\) 的矩形,有 \(q\) 次操作,每次把矩形横 / 竖着切一刀,问切完后的最大矩形面积. Solution 一个不同于大多数人. ...

  10. redis基本数据类型 set类型

    127.0.0.1:6379> SADD s1 a b c (integer) 3 127.0.0.1:6379> SMEMBERS s1 1) "b" 2) &quo ...