所谓带修主席树,就是用树状数组的方法维护主席树的前缀和 思路 带修主席树的板子 注意数据范围显然要离散化即可 代码 cpp include include include using namespace std; struct Node{ int sz,lson,rson; }PT[100100 4 ...
分类:
其他好文 时间:
2018-12-12 00:28:28
阅读次数:
191
前置知识: 普通主席树,树状数组 大概 待修主席树 和静态的一样 只不过还要加一颗树 来维护你修改的值 这棵树就是是树状数组,每个节点上再维护一颗动态开点线段树 (就是所说的树套树,不过没啥可怕的,就是麻烦一丢丢) 查询的时候老样子 不过要多加上树状数组中的值罢了 代码还算好些,如果 主席树,树状数 ...
分类:
其他好文 时间:
2018-12-12 00:18:45
阅读次数:
181
"传送门" 主席树大好题……这道题让主席树不仅停留在了区间第k大上,而是让它能执行像线段树一样的操作。 首先我们先说点套路的事。求中位数有一个二分法,就是每次二分答案,把大于等于当前二分的数设为1,小于的设为 1,之后我们只要看和是否大于0就能判断限制二分的值是大是小。然后虽然区间是不确定的,但是我 ...
分类:
其他好文 时间:
2018-12-11 17:27:24
阅读次数:
177
传送门 区间修改单点查询的主席树 改个差分就行了 首先强制在线的是查询 所以修改可以一次全读进来然后离散并且插进去 没有影响 这里的话先全修改完再查询 可以放弃树状数组直接维护差分 然后主席树维护区间数字个数和整体和 最后分到叶子节点的时候注意去对应个数个数字加进去就行 然后有个操作就是一次把所有这 ...
分类:
其他好文 时间:
2018-12-11 14:37:43
阅读次数:
194
传送门 给一个数列,每次询问一个区间内有没有一个数出现次数超过一半 区间的一半就是(r-l+1)/2 对于主席树中的两棵树L,R中的同一个节点[l,r] 如果sum的差值大于k 说明在原序列下标L`R的区间中出现了多于k个权值处于[l,r]的数字 所以按照这个套路二分就行 然后这题bzoj有双倍经验 ...
分类:
其他好文 时间:
2018-12-11 13:48:44
阅读次数:
181
"传送门" 这道题是带修主席树的板子题。我们先来考虑一下主席树带修改最暴力的做法,就是暴力修改与之有关的所有权值线段树,这样的话单次操作的复杂度就是$O(nlogn)$的,总体的操作就是$O(n^2logn)$的,显然吃不消。 因为主席树其实应用的是前缀和的思想,我们考虑一下在最开始的时候,我们是怎 ...
分类:
其他好文 时间:
2018-12-10 23:33:27
阅读次数:
281
哇仿佛磕了几百年啊; 废话不多,以下是帮助很大的一些blog: ZOJ 2112 Dynamic Rankings (动态第k大,树状数组套主席树) 主席树全纪录(这个很好) 主席树乱讲(没啥关系,不过有些题目可以刷??) ...
分类:
编程语言 时间:
2018-12-10 23:00:47
阅读次数:
240
传送门 要是不强制在线,这题线段树合并or长链剖分直接暴搞好伐 但是强制在线就有些麻烦了 我们这么考虑:建立主席树,第$i$棵树存深度$\leq i$的点的信息,那么我们每一次$query$的时候,直接查询$dep_x+k$对应的主席树上$x$的子树对应区间的最小权值即可。 很板子的一道主席树题 ...
分类:
其他好文 时间:
2018-12-09 14:18:46
阅读次数:
167
题目链接:https://www.luogu.org/problemnew/show/P1533没人写$fhq\ treap$做法,那我就补一篇qwq看到这题第一时间想主席树,然后发现我还没学主席树,于是就写了平衡树做法(当然树状数组+二分的套路也是可以的,但是两个$log$的复杂度太优秀了就不写了 ...
分类:
其他好文 时间:
2018-12-09 14:04:45
阅读次数:
192
P3899 [湖南集训]谈笑风生 题目大意 n个节点的树,q次查询,每次查询给出a,k求三元组的数量(a,b,c),(a,b,c)的定义为:a、b均为c的祖先且距离<=k 离线,启发式合并线段树,长链剖分当然都能过这题 这里讲讲主席树的做法 dfs序建树 a为b的祖先时 查询a子树内深度<=dep[ ...
分类:
其他好文 时间:
2018-12-09 14:01:19
阅读次数:
178