![](https://img-blog.csdnimg.cn/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
可持久化
Clove_unique
All that you have lost can be won back bit by bit as long as you wish for it.
展开
-
[BZOJ3524][Poi2014]Couriers(主席树)
真正有信心的人不怕暴露自己的缺点,试图掩盖粉饰才是没有信心的表现。原创 2016-05-02 17:33:14 · 1332 阅读 · 0 评论 -
[BZOJ2653]middle(二分+主席树)
题目描述传送门题解可以发现所有满足条件的中位数是具有单调性的,也就是说,如果M′<MM'<M,且MM为合法的中位数,那么M′M'也为合法的中位数。这样说并不准确,因为M′M'有可能根本就不在子序列中,但是仍然可以利用这种单调性二分,因为最终找到的中位数一定是合法的。 这里利用了一个非常厉害的技巧:根据题目中对中位数的定义,我们发现如果序列长度为奇数,中位数即为最中间的那个数,如果序列长度为偶数,那原创 2016-12-12 20:28:46 · 1179 阅读 · 4 评论 -
[BZOJ3110][Zjoi2013]K大数查询(主席树套线段树||整体二分 )
仿佛将那些年幼时的记忆全部唤起的声音已经被那温柔的笑脸 拯救过多少次原创 2016-04-28 09:57:18 · 957 阅读 · 0 评论 -
[BZOJ4556][Tjoi2016&Heoi2016]字符串(后缀数组+二分+st表+主席树)
题目描述传送门题解思路清晰就很好写… 首先二分答案mid 找到Suffix(c),在height数组中向左向右分别二分最远的lcp为mid的后缀 用st表实现O(1)O(1)查询 然后就判断[l,r]中是否出现了a…b的后缀 用可持久化线段树判断即可常数大,需要卡卡常数 学习了学姐的一个方法就是这种只需要判断有没有数的不用求具体几个的就只要有数了就返回,不做无用功然后说一下如何在heig原创 2017-01-11 14:52:00 · 894 阅读 · 0 评论 -
[BZOJ3932][CQOI2015]任务查询系统(主席树||树状数组套主席树)
题目描述传送门题解主席树的代码还真是短。 思路很好想,对于区间[l,r],只需要在l处+1并在r+1处-1就可以用前缀和来维护了。 那么可以主席树套个树状数组维护前缀和。 不过20s卡时跑过,,,不管怎么说多一个log嘛。。。我们还可以这样考虑,首先把所有的点读进来,然后按照时间排序,建主席树的时候按照时间轴建权值线段树,这样就保证了每次查询的时候当前时间点前的都加了,后的都原创 2017-01-06 09:23:57 · 899 阅读 · 0 评论 -
[BZOJ3123][Sdoi2013]森林(主席树启发式合并)
题目描述传送门题解主席树的启发式合并裸题? 坑点: ①强制在线,但是我刚开始的时候ans里存的并不是答案,而是离散化之后的值,gg。 ②合并的时候lca数组要完全清空。代码#include<algorithm>#include<iostream>#include<cstring>#include<cstdio>using namespace std;#define N 1000原创 2016-12-15 16:42:55 · 758 阅读 · 0 评论 -
[BZOJ4408][Fjoi 2016]神秘数(可持久化线段树)
题目描述传送门题解首先考虑O(mnlogn)O(mnlogn)的做法 将询问的一段区间由小到大排序,假设现在已经用前k个数组合出了[1..x]中的所有整数,那么现在考虑加入第k+1个数 若k<=x+1,那么我们一定可以组合出[1..x+k]的所有整数,不会出现断层 若k>x+1,那么x+1这个整数是无论如何都无法组合的,就可以确定答案了那么如果不排序有没有办法做呢? 同样假设当前已经组合好了原创 2017-03-04 16:39:10 · 1405 阅读 · 0 评论 -
[BZOJ4212]神牛的养成计划(trie+可持久化trie)
题目描述传送门题解这个tag好奇怪啊 首先将字符串按照字典序排序,这样有相同前缀什么的串就到一起了 然后依次将串插入一个trie,每一个点维护一下能匹配到这个点的串的左右端点 然后将每个串反过来建立可持久化trie 对于每一个询问,首先在trie上匹配一下,看匹配到的左右端点是什么。然后在可持久化trie的这段区间中查找有多少个能匹配的后缀就行了 时间是O(∑s)O(\sum s)的代码#原创 2017-03-05 20:23:24 · 1114 阅读 · 0 评论 -
[BZOJ3218][UOJ#77]A+B Problem(可持久化线段树+最小割)
题目描述传送门题解第一次见数据结构和网络流结合的题目 orz vfk首先这题一眼最小割嘛 s->i,bi;i->t,wi 对每一个点i建立一个虚拟的点i’,i->i’,pi 然后如果li<=a(j)<=ri且1<=j<=i-1,那么连边i’->j 跑最小割就行了 然而这道题边是n2n^2的,这样做不行看到区间考虑用一棵线段树来优化边数 首先假设没有1<=j<=i-1的限制 先将ai,原创 2017-02-10 07:55:25 · 595 阅读 · 0 评论 -
[BZOJ4756][Usaco2017 Jan]Promotion Counting(可持久化线段树)
题目描述传送门题解主席树好久没打也是各种手残啊 这题也是线段树合并的裸题过几天写一发!代码#include<algorithm>#include<iostream>#include<cstring>#include<cstdio>#include<cmath>using namespace std;#define N 100005int n,LSH,sz,dfs_clock,a[N],原创 2017-03-30 21:51:27 · 900 阅读 · 0 评论 -
[BZOJ3207]花神的嘲讽计划Ⅰ(hash+可持久化线段树)
题目描述传送门题解把长度为k的子串hash起来然后离散化 建立可持久化权值线段树,每一次在一段区间上查询即可代码#include<algorithm>#include<iostream>#include<cstring>#include<cstdio>#include<cmath>using namespace std;#define UNLL unsigned long long#原创 2017-01-02 20:43:48 · 666 阅读 · 0 评论 -
[BZOJ3674]可持久化并查集加强版(可持久化线段树+并查集)
题目描述传送门题解可持久化并查集,实际上就是用可持久化线段树维护一下每一个点的father。这道题我加了路径压缩,这样的话感觉不是很科学,因为最坏情况下应该是log2log^2的。 据说这道题应该用按秩合并?代码#include<iostream>#include<cstring>#include<cstdio>using namespace std;#define N 200005in原创 2016-12-15 16:45:03 · 630 阅读 · 0 评论 -
[POJ2104]K-th Number(静态主席树)
Only know you've been high when you're feeling low.原创 2016-03-11 23:28:01 · 519 阅读 · 0 评论 -
[BZOJ1901]Dynamic Rankings(动态主席树)
在事情未成功之前,人们总说不可能。原创 2016-05-13 20:26:42 · 687 阅读 · 0 评论 -
[BZOJ2588]Count on a tree(可持久化权值线段树|主席树)
忍耐,也是一件美好的事,但前提是你有非常清晰的未来版图,你知道忍耐这一段后,会有什么等着你,你愿意为此暂时收起自己的羽毛。原创 2016-05-13 20:28:41 · 1089 阅读 · 0 评论 -
[BZOJ2809][Apio2012]dispatching(枚举&dfs序+主席树||可并堆||splay+启发式合并)
你要堕落,神仙也救不了; 你要成长,绝处也能逢生。原创 2016-05-13 20:30:15 · 1548 阅读 · 0 评论 -
[BZOJ4539][Hnoi2016]树(dfs序+主席树+lca)
将军有剑,不斩苍蝇。原创 2016-08-05 18:58:11 · 824 阅读 · 0 评论 -
[BZOJ4448][Scoi2015]情报传递(树上主席树)
The sky isn’t always blue; The sun doesn’t always shine. It’s okay to fall apart sometimes.原创 2016-09-25 17:22:32 · 927 阅读 · 2 评论 -
[BZOJ3772]精神污染(dfs序+主席树)
题目描述传送门题解对于每一条链计算能完全覆盖它的有多少条。 处理出来dfs序了之后,可以发现边大概分为三种情况:x和y的lca不是x和y中的某一个,x和y的lca是x或y,还有就是一条路径就是一个点。对于第一种情况,能覆盖它的路径一定是一个端点在x的子树里,一个端点在y的子树里。对于第二种情况,能覆盖它的路径一定是一个端点在y的子树里,另外一个端点在x的子树外。对于第三种情况,除了计算和第二种情况原创 2016-12-12 15:45:23 · 1608 阅读 · 0 评论 -
[BZOJ1803]Spoj1487 Query on a tree III(dfs序+主席树)
题目描述传送门题解裸dfs序+主席树。代码#include<algorithm>#include<iostream>#include<cstring>#include<cstdio>using namespace std;#define N 100005int n,m,x,y,k,ans,a[N],b[N],mp[N];int tot,point[N],nxt[N*2],v[N*2];原创 2016-12-09 20:05:14 · 574 阅读 · 0 评论 -
[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 · 576 阅读 · 0 评论 -
[BZOJ3166][Heoi2013]Alo(可持久化线段树+可持久化tire树)
题目描述传送门题解xorxor的操作很容易想到可持久化trie树,但是关键是次大值比较头疼。 可以发现,如果可以维护出来每一个点向前和向后第一个以及第二个比它大的值的位置就可以确定区间了。 实际上,可以用可持久化线段树的思想来搞。将所有的值从大到小排序,然后按照每一个点的位置插入线段树,相当于对于每一个点,比它大的点已经都插入进去了。每一次查询就是从权值大于当前点的线段树里找出当前点前驱的前驱,原创 2016-12-15 16:41:21 · 723 阅读 · 0 评论