首页 > 其他分享 >01-Trie 的应用

01-Trie 的应用

时间:2024-08-19 22:15:11浏览次数:13  
标签:01 子树内 Trie trie 异或 应用 例题

01-Trie 的应用

01-trie 就是把一个整数的二进制表示看成一个 01 字符串然后插进字典树里。

因为我们的 01-trie 要体现像平衡树一样的大小关系,同时有时还需要知道异或最值等信息,所以一般都是从高位往低位插。

01-trie 的一个节点一般可能需要维护这些信息:左右儿子、子树内包含的整数个数、子树内插入整数的最大值、子树内最大编号等。

异或极值

有一个序列,每次给出一个整数,问这个整数异或上序列中一个数的异或和的最大值是多少。

对序列建出 01-trie,考虑从根节点开始游走至最底层,于是每次看往左右哪边走更优。

例题 -INF:野猪骑士

基本思想是分治,然后用 01-trie 做。

这题有一个找序列中异或 \(x\) 大于 \(y\) 的位置中编号最大的位置。

也可以对序列建 01-trie,然后同样是从根节点开始游走,分类讨论一下最优性,注意我们还需要维护子树内插入数的编号最大值。

例题 1:最长异或路径

钦定一个根节点,先处理出每个点到根的异或和 \(s_i\),则任意两个点的路径的异或和都为 \(s_i\oplus s_j\),因为它们 LCA 到根的路径异或两次没有贡献。

然后就变成了任意两数的异或最大值,对 \(s\) 建出 01-trie,枚举一个 \(s_i\) 让它在 01-trie 上匹配即可。

例题 2:异或粽子

配合堆或可持久化 01-trie。

维护异或和

需要从低位往高位建 01-trie。

全局加 1

所有数的数值加 \(1\)。

01-Trie 合并

类似于合并线段树的思路,均摊复杂度是正确的。

维护异或和 & 全局加 1 & 01-Trie合并 例题:[Ynoi2010] Fusion tree

实现平衡树

我们可以用 01-trie 代替平衡树,可以做到 \(O(n\log V)\),其中 \(V\) 是值域。

实现可持久化平衡树

把 01-trie 做平衡树的做法可持久化即可,01-trie 可持久化的方法与可持久化线段树类似。

标签:01,子树内,Trie,trie,异或,应用,例题
From: https://www.cnblogs.com/dccy/p/18368239

相关文章

  • C语言程序设计-[23] 数组应用(续)
    1、输入一行字符,统计其中有多少个单词。根据以上分析,代码与结果如下:#include"stdio.h"intmain(){charc,pre,str[81];inti,n=0;gets(str);pre='';for(i=0;c=str[i];i++){ if(c!=''&&pre=='') {......
  • P10155题解
    1题意给定一个排列ppp,每次可以选择一个数pi......
  • 云计算实训31——playbook(剧本)基本应用、playbook常见语法、playbook和ansible操作
    playbook(剧本):是ansible⽤于配置,部署,和管理被控节点的剧本。⽤于ansible操作的编排。使⽤的格式为yaml格式一、YMAL格式以.yaml或.yml结尾⽂件的第⼀⾏以"---"开始,表明YMAL⽂件的开始(可选的)以#号开头为注释列表中的所有成员都开始于相同的缩进级别,并且使⽤⼀......
  • 信息学奥赛初赛天天练-69-NOIP2017普及组-完善程序2-切割绳子、二分答案、二分边界、
    1完善程序(单选题,每小题3分,共30分)切割绳子有n条绳子,每条绳子的长度已知且均为正整数。绳子可以以任意正整数长度切割,但不可以连接。现在要从这些绳子中切割出m条长度相同的绳段,求绳段的最大长度是多少。(第一、二空2.5分,其余3分)输入:第一行是一个不超过100的正整数n,......
  • AI 创业及变现新思路:零门槛 AI 绘图,定制 ComfyUI Serverless API 应用
    作者:鸥弋、筱姜2023年下半年,ComfyUI以其快速、流畅的图像生成能力,结合多样的自定义节点,迅速在创作者中流行起来。ComfyUI的亮点就是能够批量化生成图像,一键加载大量工作流,让用户可以轻松实现人像生成、背景替换、风格迁移和图像动画化等功能。越来越多的企业及个人开发者希望......
  • 题解:「ROI 2017 Day 2」存储器
    题目信息题目链接LuoguP10653、LOJ2770题目描述给定一个字符串\(S\),设其长度为\(n\),每个字符要么是+要么是-。定义一个片段为\(S\)的一个子串\(S[l,r]\)满足下面三个条件:\(l=1\)或者\(S_{l-1}\neS_l\)。\(r=n\)或者\(S_{r+1}\neS_r\)。\(S_l=S_{l+1}=......
  • SimpleRAG:基于WPF与Semantic Kernel实现的一个简单的RAG应用
    SimpleRAG介绍SimpleRAG是基于WPF与SemanticKernel实现的一个简单的RAG应用,可用于学习与理解如何使用SemanticKernel构建RAG应用。GitHub地址:https://github.com/Ming-jiayou/SimpleRAG主要功能AI聊天支持所有兼容OpenAI格式的大语言模型:文本嵌入支持所有兼容OpenAI格式......
  • Visual Studio 2013 jsoncpp 0.10.7库编译
    前言全局说明VisualStudio2013jsoncpp编译jsoncpp介绍说明:https://www.cnblogs.com/wutou/p/18367551一、说明环境:Windows7旗舰版VisualStudio2013二、选择根据vs2013工具环境和jsoncpp介绍,这里选用0.10.7版本演示三、准备3.1解压文件进入m......
  • python基础语法 010 类和对象-6-1 继承定义
    前提:    在真实世界中,类型之间可能存在范围包含关系,比如:人这个类型和亚洲人这个类型。        人是包括了亚洲人的,如果某人是员工亚洲人,那么它必定是一个人        这种关系,在编程语言中称为继承关系        比如上面例子:亚洲人这个类就继......
  • Visual Studio 2013 自定义动态库dll文件lib存放路径
    前言全局说明VisualStudio2013自定义lib存放路径一、说明环境:Windows7旗舰版VisualStudio2013二、设置说明在一个功能比较全的项目中,有可能会引入第三方库来完成某些功能,为了让目录结构、文件,清晰,会将引入的dll文件,放置到一个独立目录里。这样方便管理,也便......