数据结构:主席树(可持久化线段树)
文章平均质量分 92
ProLightsfxjh
这个作者很懒,什么都没留下…
展开
-
POJ - 2104 K-th Number 主席树基础题
题意:给出一个数组,每次询问这个数组的区间[L, R]内第k大的数是什么。 主席树基础题 主席树,又称可持久化线段树,是对于数组的每个前缀a[1...i]建立一颗线段树,并且a[1...i]的线段树和a[1...i+1]的线段树的区别是只有树上的一条链不同,所以每次对于一颗新的线段树其实只是添加一条长度为logn的链。 它的核心是寻找公共节点和主席树的加减性。 时间复杂度每次查询和修改都是logn,并且空间复杂度大概是O(nlogn)所以一般开20*MAXN的数组应该没有问题。 这里推荐一篇讲解主席树讲得很原创 2017-07-31 14:22:35 · 779 阅读 · 0 评论 -
HDU - 4417 Super Mario 主席树+二分
题意:给出一个长度为n(1<=n<=1e5)的数组,m(1<=m<=1e5)次询问,每次询问在区间[L,R]中小于等于X的数的个数。 主席树+二分 朴素的主席树是查询区间第k大(从小到大第k大),所以只需要在每次询问的时候二分的找出在此区间里比X大的最小的数的大小,比如这个值为y(初始化为-1),则答案为y-1,即把这个比X大的数去掉(因为X可能不止一个,所以要这样处理),此外如果y未被刷新则说明X是这个区间最大的数了 此时y = R-L+1。 所以时间复杂度原创 2017-07-31 16:05:55 · 869 阅读 · 0 评论 -
SPOJ - COT Count on a tree 树上主席树+LCA+任意路径问题
题意:给出一个树和树上每个点的权值,给出m个询问(u,v,k),询问在树上从点u到点v所构成的路径上权值第k小的点的权值。 树上主席树+LCA+任意路径问题 主席树维护的一个前缀和,而前缀和不一定要出现在一个线性表上(或者说树型可以线性话),即对于每个从根到点u的路径是一个线性序列,可以把这个序列建成主席树。 利用这个前缀和,我们可以解决一些树上任意路径的问题,比如在线询问[u,v]点对的距离——dist[u]+dist[v]-2*dist[LCA(u,v)]。 类似的,我们可以利用主席树来解决树上任意路径原创 2017-10-17 15:18:27 · 792 阅读 · 0 评论