01字典树
文章平均质量分 51
01字典树
昵称很长很长真是太好了
这个作者很懒,什么都没留下…
展开
-
Beautiful Subarrays (01字典树 瞎搞)
题意: 题解: 一看问的是子序列,并且还是异或。 首先想到01字典树,再一看让你求子序列的个数,大致是想让你把这个序列进行前缀异或处理后然后再01字典树上进行操作吧。 假设01字典树往左边是0右边是1 对于如何寻找k这个值,肯定是顺着k这个值对应的链下去,那么对于这条链右边的链来说,值都是大于k的。那么我们在递归k的时候,对于右边的链直接把他们的个数给加上即可。这题比较难处理的是对于异或前缀的一个转换。 特别注意叶子节点需要特判一下。 大佬的代码: #include<bits/stdc++.h>原创 2021-06-21 22:57:10 · 244 阅读 · 0 评论 -
牛客练习赛81 小Q与彼岸花 (分块+可持久化01trie)
题意: 题解:因为这个题目是弱化以后的,正常的范围是5e4 . 看了官方题解去学习了一波可持久化01trie然后回来把这个题补完。 可持久数据结构其实就是我们的数据结构的内容会不断发生变化,而我们还要查询以前的历史版本,比如某个区间的情况。 听名字可以听出来,可持久化01trie跟可持久化线段树差不多的效果,对于01字典树来说,可以指定查询 l−rl-rl−r 范围内的数组成的字典树。 但是针对于这个题目我们直接使用可持久化01trie进行维护,时间还是不能被允许的,所以说, 我们还需要去继续优化。 如何原创 2021-04-26 19:07:53 · 175 阅读 · 0 评论 -
CF888G Xor-MST (01字典树+MST)
题意: 给你n个数,每个数有一个值。 问你这n个数的最小生成树为多少,两点之间的边权为异或值。 题解: 参考了洛谷上的一个题解,总觉得这样的时间复杂度会爆炸,但是确确实实没爆炸。 我们每次去合并两个点,要想尽量使全值小,对于一颗字典树来说,就要尽量先合并越靠树叶的结点,一个叶子结点对应一个结点。 那么我们对于一颗字典树来说,我们把他运用到最近公共祖先上,把所有最近公共祖先的结点来说,他有两个孩子,也就是要练的结点就是所有的最近公共祖先的结点。 对于每一个公共祖先结点,我们对其左右儿子尽心递归查找,尽量找到最原创 2020-11-04 00:17:12 · 173 阅读 · 0 评论 -
Perfect Security (01字典树&&删除点)
题意: 第一行给你一个n 第二行给你n个数字 分别是a[1],a[2]…a[n]。 第三行给你n个数字 分别是b[1],b[2]…b[n]。 问:第三行的序列可自由排列,要求排列之后的顺序 a[1]b[1],a[2]b[2]…a[n]^b[n]的字典序最小。 题解: 因为b数组可以自由排列,那么我们把b数组先生成一个字典序。 要想字典序最小,那么根据贪心的思想,我们a[1]要与b中的某个数异或后值最小。 那么我们再遍历一遍a数组每次找出当前能组合的最小值。 因为每次组合后,我们需要删除b中一个元素,那么b原创 2020-10-30 23:23:32 · 211 阅读 · 0 评论 -
Vitya and Strange Lesson (01字典树)
题意:给定一组数,然后对所有的数进行异或操作m次异或操作,问你每次操作后,没有出现过的最小的非负整数 题解: 首先需要一个性质(ab)c=a(bc); 所以我们没有必要对于所有的数进行异或操作。 我们只需要设一个ans=0,每次用输入进来的数于ans进行异或即可。 其次,我们把没有出现过的数字加入进字典树,这样的话我们从高位到低位寻找与当前ans按位 比较相同的数字,如果不相同那么我们就给 返回值加上当前位的值。最后返回值极为最小mex。 /*Keep on going Never give up*/ /原创 2020-10-30 14:08:16 · 146 阅读 · 0 评论 -
奶牛异或(01字典树)
题意: 让你找一个连续区间异或和最大,如果有相同的,则输出断点较小的。 题解: 01字典树,利用前缀和的思想进行求解,我们在插入前缀的同时,也在不断的更新最大值。 我们查询当前 二进制字符串与已经插入的 二进制字符串中的哪一个异或和最大? 找到最大的那个,读取这个前缀和是到谁结束的,来判断是否要更新 /*Keep on going Never give up*/ //#pragma GCC optimize(3,"Ofast","inline") #include<bits/stdc++.h>原创 2020-10-30 00:31:51 · 226 阅读 · 0 评论 -
The XOR Largest Pair(01trie模板题)
题意:给你一堆数,问你从里面跳出来两个数异或和最大。 (菜鸡第一次用字典树做题) 题解:之前没用过字典树做题,,看了大佬的题解,才知道字典树还有这种妙用。 对于二进制,如果我们想让它最大,(一点贪心的小思想)那么最高位的1 我们是要尽量保留的,(再就是保留次高位…)。 对此我们建立一颗字01字典树,一条链对应的是一棵树的二进制形式,每次查询一个数字与已经放进去的最大异或值, **如何异或最大,就是在二进制下 与查询的这个数字 每位尽可能不同 ** 当然前提下是从 最高位到最低位进行遍历(最高位权重大原创 2020-10-29 21:38:57 · 125 阅读 · 0 评论