trie
文章平均质量分 54
Clove_unique
All that you have lost can be won back bit by bit as long as you wish for it.
展开
-
[BZOJ3261]最大异或和(可持久化trie树)
题目描述传送门题解设sum[i]sum[i]表示1...i1...i的异或和,那么题目要求的即为sum[i]sum[i]^sum[n]sum[n]^xx。由于sum[n]sum[n]和xx都是定值,那么我们需要维护的就是sum[i]sum[i]。 将sum[i]sum[i]转化为二进制数,然后建立可持久化trie树。利用前缀和相减的思想,对于每一个询问只需要根据sum[n]sum[n]^xx的每一原创 2016-12-15 16:37:55 · 592 阅读 · 0 评论 -
[BZOJ2741][FOTILE模拟赛]L(trie+分块)
题目描述传送门题解首先将序列分块,L(i),R(i)分别表示第i个块的左右端点 设f(i,j)表示[L(i),j]的最大异或和,g(i,j)表示[j,R(i)]的最大异或和 那么对于询问[l,r] 如果在同一块中,直接暴力O(n)O(n) 如果在不同的块中,假设所在的块为li,ri,那么ans=max{f(li+1,r),g(ri-1,l),对于[l,R(li)]和[L(ri),r]暴力求出原创 2017-02-13 23:08:15 · 608 阅读 · 0 评论 -
[BZOJ4212]神牛的养成计划(trie+可持久化trie)
题目描述传送门题解这个tag好奇怪啊 首先将字符串按照字典序排序,这样有相同前缀什么的串就到一起了 然后依次将串插入一个trie,每一个点维护一下能匹配到这个点的串的左右端点 然后将每个串反过来建立可持久化trie 对于每一个询问,首先在trie上匹配一下,看匹配到的左右端点是什么。然后在可持久化trie的这段区间中查找有多少个能匹配的后缀就行了 时间是O(∑s)O(\sum s)的代码#原创 2017-03-05 20:23:24 · 1129 阅读 · 0 评论 -
[BZOJ3166][Heoi2013]Alo(可持久化线段树+可持久化tire树)
题目描述传送门题解xorxor的操作很容易想到可持久化trie树,但是关键是次大值比较头疼。 可以发现,如果可以维护出来每一个点向前和向后第一个以及第二个比它大的值的位置就可以确定区间了。 实际上,可以用可持久化线段树的思想来搞。将所有的值从大到小排序,然后按照每一个点的位置插入线段树,相当于对于每一个点,比它大的点已经都插入进去了。每一次查询就是从权值大于当前点的线段树里找出当前点前驱的前驱,原创 2016-12-15 16:41:21 · 726 阅读 · 0 评论