随笔分类 -  trie

摘要:做前缀异或和,用堆维护一个五元组(x,l,r,p,v),x为区间右端点的值,l~r为区间左端点的范围,p为x在l~r中最大异或和的位置,v为该最大异或和,每次从堆中取出v最大的元素,以p为界将其切成两部分重新扔进堆即可。查询一个值在一个区间中的最大异或和用可持久化trie实现。luogu上T掉了。 阅读全文
posted @ 2019-04-09 21:26 Gloid 阅读(175) 评论(0) 推荐(0) 编辑
摘要:按位贪心,以当前考虑位是0还是1将数分成两部分,则MST中这两部分之间只会存在一条边,因为一旦有两条或以上的边,考虑两条边在原图中所成的环,显然这两条边有一条是环上的权值最大边,不会出现在MST中。则建出trie后每次分治时用数较少的部分在trie上贪心求出边的最小权值即可。 阅读全文
posted @ 2019-04-01 13:01 Gloid 阅读(356) 评论(0) 推荐(0) 编辑
摘要:离线,每次修改相当于对该规则的所有匹配点的值+1,考虑在trie上打加法标记和匹配标记,匹配标记不下传,加法标记下传遇到匹配标记时清空。注意是用b时刻前缀-a时刻前缀,而不是(a-1)时刻前缀,具体我也不知道为啥可能是我没看懂题。 阅读全文
posted @ 2019-01-04 13:11 Gloid 阅读(370) 评论(0) 推荐(0) 编辑
摘要:字符串扔进trie,vector记录每个前缀出现次数的最大值的更新记录即可。 阅读全文
posted @ 2018-11-28 21:50 Gloid 阅读(178) 评论(0) 推荐(0) 编辑
摘要:倒过来变成查询前缀。考虑怎么排序。第一条代价n*n就相当于inf,说明一个单词的所有前缀都要排在它前面。那么串的依赖关系就是trie的结构。二三条说明代价是Σidi-idfa,那么显然最后的编号应该是trie的一个dfs序(去掉无用节点),并且显然应该先走较小的子树,因为这样使兄弟节点和父亲的编号差 阅读全文
posted @ 2018-11-01 17:20 Gloid 阅读(178) 评论(0) 推荐(0) 编辑
摘要:树上建可持久化trie即可,有点过于裸了。darkbzoj过了然而在bzoj一直wa,不知道哪有锅。 阅读全文
posted @ 2018-10-30 22:11 Gloid 阅读(169) 评论(0) 推荐(0) 编辑
摘要:用trie求出前缀最大区间异或和、后缀最大区间异或和即可。注意空间是nlog的。 阅读全文
posted @ 2018-10-23 18:39 Gloid 阅读(144) 评论(0) 推荐(0) 编辑
摘要:将串反过来就变成查询前缀了。考虑建一棵可持久化trie,查询时二分答案,均摊一下复杂度即为O(mlogn)。 阅读全文
posted @ 2018-09-20 19:56 Gloid 阅读(165) 评论(0) 推荐(0) 编辑
摘要:显然做个前缀和之后变成询问区间内两个数异或最大值。 一种暴力做法是建好可持久化trie后直接枚举其中一个数查询,复杂度O(nmlogv)。 观察到数据范围很微妙。考虑瞎分块。 设f[i][j]为第i个块中的数和第j个数的异或最大值。显然建一棵可持久化trie就可以以O(n√nlogv)的复杂度搞出来 阅读全文
posted @ 2018-09-08 02:12 Gloid 阅读(142) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示