主席树
seeeagull
这个作者很懒,什么都没留下…
展开
-
[P2617]Dynamic Rankings(树状数组+主席树)
求带修区间第k小。如果是静态的区间第k小,可以离散化后建主席树维护一个前缀和,查询时在线段树上差分一下就能得到一段区间内某范围点的个数,判断是跳到左子树还是右子树;如果是修改前缀和,可以用树状数组。那么要是把一棵树看作区间上一个点,似乎就可以树套树来做带修的区间第k小了。首先做一下离散化,然后从1到n来用树状数组添加每个点的影响,就相当于把树状数组上的一次加法变成线段树上的一次单点修改。然后每...原创 2019-05-21 20:06:14 · 210 阅读 · 0 评论 -
[P4175][CTSC2008]网络管理(LCA+树状数组+主席树)
求树上链的带修第k大,跟我上一篇的区间带修第k大其实思路差不多。区别见下。只要先dfs一遍记录dfs序,就可以看成一个序列了。每个节点对应的线段树要维护从它到根的不同权值个数,所以每个节点会对以它为根的子树产生影响,所以树状数组修改时是区间修改而不再是单点修改。u到v的路径=u+v-lca(u,v)-lca(u,v)的父亲,所以查询时是四个位置一起跳。其他就没什么特别的了。#includ...原创 2019-05-22 10:03:02 · 137 阅读 · 0 评论 -
[P3332][ZJOI2013]K大数查询(树套树)
感觉跟Dynamic Rankings差不多,但是需要区间修改。可以考虑分别维护两个树状数组,Σroot[1~i]记录第i个位置目前都有哪些数,Σroot1[1~i]记录第i个位置分别和前面i-1个位置的差的和。这样修改时就差分变成了单点修改,查询时用root中的值*位置的序号-root1中的值求出从第1个到所求位置的数的个数和,再加上和上面那道题一样的树状数组和主席树的操作就可以了。...原创 2019-06-17 14:42:49 · 253 阅读 · 1 评论