随笔分类 - 主席树
摘要:题面传送门 这道题我们首先会想到处理中位数的常见方法: 二分枚举答案ans,将大于ans的数变为1,小于的则变成-1;如果这个区间的和大于1,则说明中位数比枚举的答案要大,否则要小; 但是这道题的区间并不确定,难道我们要n*n枚举?肯定不行; 观察性质,我们发现,对于区间[b,c],我们肯定要选择,
阅读全文
摘要:题面 首先,由于本人太菜,不会莫队,所以先采用主席树的做法; 离散化是必须环节,否则动态开点线段数都救不了你; 我们对于每个元素i,插入到1~(i-1)的主席树中,第i颗线段树(权值线段树)对于一个区间[l,r]维护的便是原序列1~i中的所有属于[l,r]的元素出现的最后位置的最小值; 当我们查询[
阅读全文
摘要:【问题描述】 Mark Douglas是一名优秀的锻造师。与他优秀的锻造水平不相符,他非常穷,以至于很多好刀都因为缺少素材缺少资金无法打造。 Mark把他有能力锻造的所有n种刀建成了一棵锻造树,除了第1种刀可以直接打造以外,其他的刀都只能从某一种刀加工而来。具体而言,第i种刀只能从第fai种刀加工而
阅读全文
摘要:题面 对于每个点建立一颗主席树; 然后按照树上差分的思想统计主席树的前缀和; lca+主席树+前向星存表就可以了;
阅读全文
摘要:题面 这题好水的说~很明显就是主席树的大板子 然而我交了3遍才调完所有的BUG,开好足够的数组,卡掉大大的常数; 针对与每次操作,change()会创建新节点,而ask()虽然也会更新左右儿子的节点编号,但并不会创建除根节点以外的点; 处理好以上change()和ask()的细节就可以轻松地切掉这道
阅读全文
摘要:直接看代码似乎更清晰一些 我们一开始要建一棵空线段树,然后一个一个的添加线段树。加入线段树后会是这样: 再加入[1, 至此,裸树就建好了,并且只用了O(nlogn)的空间。 查询的时候存两个点,一开始为两个区间的根结点,两结点的差比大小,两个点要同时往左/右跳。 经典问题,区间第k小: 每个线段树i
阅读全文

浙公网安备 33010602011771号