按时间作为主席树的版本,每个版本的主席树都是一个权值线段树。 差分消去时间影响 对于当前时间版本的主席树查询前K大即可。 树上二分时结束后切记判定l==r的状态(易错 l==r叶子节点可能存在多个值(值大小为sum/siz ) 用I64dOLE了好久 。。 。。。。 。 。。 。 。 。 。 。 。 ...
分类:
其他好文 时间:
2017-08-11 23:01:34
阅读次数:
112
可持久化并查集我觉得就是可持久化数组的一种应用。可持久化数组,顾名思义,就是有历史版本的数组,那么如果我们暴力修改储存的话,修改O(n)查询O(1),空间O(n*m),这样肯定不可行,那么我们发现主席树有这样的功能,他可以快速复制,修改O(log),查询O(log),空间(m*log),是一个可行的 ...
分类:
其他好文 时间:
2017-08-09 22:19:07
阅读次数:
199
解题关键:离线求区间第k小,主席树的经典裸题; 对主席树的理解:主席树维护的是一段序列中某个数字出现的次数,所以需要预先离散化,最好使用vector的erase和unique函数,很方便;如果求整段序列的第k小,我们会想到离散化二分和线段树的做法, 而主席树只是保存了序列的前缀和,排序之后,对序列的 ...
分类:
其他好文 时间:
2017-08-06 23:14:10
阅读次数:
376
这道题的内存…………………真·精神污染……….. 这道题的思路很明了,我们就是要找每一个路径包含了多少其他路径那么就是找,有多少路径的左右端点都在这条路径上,对于每一条路径,我们随便选定一个端点作为第一关键字,另一个作为第二关键字,于是就有了两维限制,按照主席树的一般思路,我们把建树顺序作为一维,然 ...
分类:
其他好文 时间:
2017-08-05 10:01:39
阅读次数:
259
我们直接按父子关系建主席树,然后记录倍增方便以后求LCA,同时用并查集维护根节点,而且还要记录根节点对应的size,用来对其启发式合并,然后每当我们合并的时候我们都要暴力拆小的一部分重复以上部分,总时间复杂度为O(n*log),因为每个的节点只会作为小的部分合并,因此他所在的一小部分至少变大2倍,对 ...
分类:
其他好文 时间:
2017-08-05 10:01:00
阅读次数:
252
#include <iostream> #include <algorithm> #include <cstdio> #include <cstring> #include <cmath> #include <string> #include <cstdlib> #define maxn 10000 ...
分类:
其他好文 时间:
2017-08-03 23:06:55
阅读次数:
491
这一次,我们来了解普通Trie树的变种:0-1Trie以及在其基础上产生的可持久化Trie(其实,普通的Trie也可以可持久化,只是不太常见) 先简单介绍一下0-1Trie:一个0-1Trie节点只有两个子节点,分别代表0和1;从根节点开始,第一层代表限制的最高位,依次往下直到最底层,代表二进制第0 ...
分类:
其他好文 时间:
2017-08-03 22:04:11
阅读次数:
163
最近跑来打数据结构,于是我决定搞一发可持久化,然后发现……一发不可收啊…… 对于可持久化数据结构,其最大的特征是“历史版本查询”,即可以回到某一次修改之前的状态,并继续操作;而这种“历史版本查询”会衍生出其他一些强大的操作。 今天,我们主要讲解可持久化线段树。其实,它的另外一个名字“主席树”似乎更加 ...
分类:
其他好文 时间:
2017-08-02 21:03:44
阅读次数:
190