01字典树
文章平均质量分 54
Jozky86
这个作者很懒,什么都没留下…
展开
-
CF455B A Lot of Games
CF455B A Lot of Games题意:Andrew,Fedor和Alex是三个善于创造的人。现在,他们发明了一种字符串双人游戏。给出n个非空字符串。在游戏中,两位玩家一起建造一个单词。开始时,单词是一个空字符串。两位玩家轮流操作。一位玩家在他的回合中,必须在单词的后面添加一个字母,使得添加后的单词是n个字符串中至少一个的前缀。当一位玩家不能操作时,他就输掉了游戏。Andrew和Alex决定玩k次。上一局的负者是下一局的先手。他们决定,在最后一局中获胜的人获得整场游戏的胜利。Andrew和A原创 2021-10-31 22:14:35 · 1992 阅读 · 0 评论 -
P4592 [TJOI2018]异或
P4592 [TJOI2018]异或题意:现在有一颗以 1 为根节点的由 n 个节点组成的树,节点从 1 至 n 编号。树上每个节点上都有一个权值 vi。现在有 q 次操作,操作如下:1 x z:查询节点 x 的子树中的节点权值与 z 异或结果的最大值。2 x y z:查询节点 x 到节点 y 的简单路径上的节点的权值与 z 异或结果最大值。题解:很明显的可持久化01Trie对于第一个问题,直接按照时间戳(DFS序)建立点权的可持久化01Trie,每次查询就是对区间[dfn[u],dfn[u]原创 2021-08-03 19:50:12 · 241 阅读 · 0 评论 -
P4735 最大异或和
P4735 最大异或和题意:一个非负序列a,初始长度为n,有两种操作:A x,在序列中添加x,n加一Q l r x,询问操作,询问一个位置p,p满足l<=p<=r,使得p到位置n的的异或和与x的异或值最大,输出最大值题解:我们来看这个查询操作,p∈[l,r],我们设整个区间的异或值为tot,a[p]⊕a[p+1]⊕.....a[N]a[p] ⊕ a[p+1] ⊕ .....a[N]a[p]⊕a[p+1]⊕.....a[N]=tot⊕(a[1]⊕a[2].....⊕a[p−1])原创 2021-08-02 21:42:07 · 250 阅读 · 0 评论 -
可持久化3--可持久化01Trie
01Trie可持久化 01Trie 的方式和可持久化值域线段树的方式是相似的,只是以 01字典树 的方式来维护值域。一般用来解决异或相关的能够按位贪心的题目。其实就是将可持久化线段树中的操作嫁接到01Trie中,这样就是解决任意一个区间内的问题。例题:P4735 最大异或和P4551 最长异或路径P4592 [TJOI2018]异或P3293 [SCOI2016]美味...原创 2021-08-02 21:33:08 · 298 阅读 · 0 评论 -
P4551 最长异或路径
P4551 最长异或路径题意:给定一棵 n 个点的带权树,结点下标从 1 开始到 n。寻找树中找两个结点,求最长的异或路径。异或路径指的是指两个结点之间唯一路径上的所有边权的异或。题解:我们指定1为根节点,T(u,v)表示u到v之间的路径的边权异或和,那么T(u,v)=T(root,u) Xor T(root,v)所以我们可以将所有的T(root,u)插入到一个trie中,对每个T(root,u)快速求出和它异或最大的T(root,v)从trie的根开始,如果能向和T(root,u)的当前位不原创 2021-07-28 16:29:16 · 170 阅读 · 0 评论 -
I love counting HDU - 6964
I love counting HDU - 6964题意:一个数组c,给你了(l,r)一个范围,问这个范围内满足ci ^ a < b数量的有多少?题解:我第一反应是莫队,直接莫队得到结果,但是发现样例不对,再调了半天后我突然想明白,对于每个询问a和b是不一样的,也就是说莫队是通过询问来调整区间大小,上一次询问满足情况的答案不一定适用于下一个询问,所以每次都要重新询问,所以就不是简单的莫队方法一:不能直接莫队,那我们就改改,用莫队+分块来做,我们用莫队维护每次询问的每个块内元素种类,以及每个原创 2021-07-26 11:18:27 · 283 阅读 · 0 评论 -
Xor sum HDU - 6955
Xor sum HDU - 6955题意:给定一个长度为n的整数序列,求其XOR和不小于k的最短连续子序列。如果有多个相同长度的连续子序列,则打印具有最小左端点的连续子序列。如果没有连续的子序列开关XOR总和不小于k,只需打印“-1”。题解:有关01串且求异或值相关内容,一般都用01字典树,本题也不例外本题如何维护字典树呢?我们先求出所有的前缀异或和[1,P],当前在Q的位置,我们寻找一个离Q最近的一个数,使得Q ^ P>=K。每次查询时,(此时字典树中只插入了Q之前的所有前缀异或和)原创 2021-07-23 14:55:56 · 203 阅读 · 0 评论 -
1414. 牛异或
题意:区间长度为n的数组a,取连续一段子序列,问哪段子序列的异或和最大,如果存在多个这样的序列,那么选择序列末端整数对应的编号更小的那个序列。如果仍然存在多个可选的序列,那么选择长度最短的那个序列。题解:01字典树模板题代码:#include<bits/stdc++.h>using namespace std;const int maxn =1e7+10;const int MaxN = 0x3f3f3f3f;const int MinN = 0xc0c0c00c;ty原创 2021-01-30 10:21:08 · 142 阅读 · 0 评论 -
Chip Factory HDU - 5536
Chip Factory HDU - 5536题意:给你n个数,让你从中选出i,j,k三个下标,求最大的 (a[i]+a[j])^ a[k]题解:这种查找最大异或一般有两个方向,一个是有公式推导规律可循,另一个可以联合01字典树。如何用01字典树做呢?我们先将所有所有数插入到字典树中,然后暴力枚举i和j,求出a[i]+a[j]的和sum,现在我们要求a[k],让sum和a[k]的值最大,我们可以将sum取反,然后在字典树上找最接近sum的值,那就是符合的k,当然在查找前要先删除i和j,因为i,j原创 2021-07-14 16:16:05 · 152 阅读 · 0 评论