主席树(可持久化线段树) 前置芝士 知识点 线段树,权值线段树(不一样),离散化,前缀和(思想) 由来 据说,是一位叫fotile主席的大大在写一道题时因为不会划分树就临时yy出一个算法,于是,这算法就这么诞生了。 作用 对区间求 \(kth\) 思想 思考优化策略 一列数,可以对于每个点i都建一棵 ...
分类:
其他好文 时间:
2020-07-19 17:57:51
阅读次数:
52
权值线段树 前置芝士 ? 顾名思义,权值线段树也算是一种线段树,它的本质也是线段树。所以在学习权值线段树之前,如果对普通线段树的掌握不太熟,可以先去这里去搜索线段树进行学习。 ? 而权值线段树的进一步本质则是用线段树维护桶。同理,如果不知道桶是什么可以到这里进行搜索。 概念 ? 我们知道,普通线段树 ...
分类:
其他好文 时间:
2020-07-19 16:32:24
阅读次数:
61
线段树合并 前置芝士 动态开点线段树和权值线段树 乍一看,线段树合并和上面那两个奇怪的东西有什么关系。 其实,线段树合并的全称为动态开点权值线段树合并( 雾 如果对上面那两个奇怪的东西不理解可点开链接进行搜索(大雾 优点 ? 动态开点线段树有着一些优点,比如说当你让某个节点继承另一个节点的左儿子或者 ...
分类:
其他好文 时间:
2020-07-19 16:32:06
阅读次数:
90
(鸽 王 归 来) #算法简介 线段树合并可以将2个权值线段树合并为一个。 #实现 很简单,我们的操作如下: 2棵线段树都有的节点,把它们的值合并。 只有一颗线段树有节点,那么合并出来的线段树节点的值就是这个节点的值。 依次递归下去搞定一切。 一般来说,如果不需要用合并前的线段树信息,我们就可以卡一 ...
分类:
其他好文 时间:
2020-07-08 20:06:13
阅读次数:
47
树上主席树。 题意要求求u-v的路径上,前k小个数字是多少。转换一下,每次求1-k小的数字。故我们想到了树上主席树。 基于树上点前缀和的特点有:$sum[u]+sum[v]-sum[lca]-sum[fa[lca]]$是u-v路径的和。我们基于此,使用主席树,每个子树是权值线段树。就可以使用前缀和的 ...
分类:
其他好文 时间:
2020-07-07 17:35:54
阅读次数:
57
雨天的尾巴 这道题应该算是很板子了,不过需要稍微思考一下,对于每次发放,如果模拟发放过程,那么每次发放的时间复杂度是$O(n)$的,这样显然会T,考虑如果每次只发放一种,用树上差分解决就可以,但是这个有很多种,所以给每个结点开一棵权值线段树就行,每个节点记录每种救济粮的数量,然后同样是利用差分的思想 ...
分类:
其他好文 时间:
2020-07-05 15:42:13
阅读次数:
51
题目链接:https://codeforces.com/contest/1354 想法: 很明显的权值线段树(值域线段树)板子题。 #include <algorithm> #include <string> #include <cstring> #include <vector> #include ...
分类:
其他好文 时间:
2020-06-30 00:43:08
阅读次数:
58
题意:https://www.luogu.com.cn/problem/P4556 树链加数,问你每个节点最多的是哪个数。 思路: 树链加数很容易想到差分。 从下往上用权值线段树合并即可,直接用pushup把答案存在树根即可,不用每次查询最多的数 1 struct EDGE 2 { 3 int to ...
分类:
其他好文 时间:
2020-06-25 17:45:26
阅读次数:
57
令$a_{i,j}(j\le i)$表示第i个人的方案中给第j个人$a_{i,j}$的钱,有以下性质: 1.如果第j个人一定同意(否则就会死)第i个人的方案,那么$a_{i,j}=0$(容易发现一定同意的人就是在上一个不是-1之后的人) 2.否则$a_{i,j}=1+\max_{1\le t<i}a ...
分类:
其他好文 时间:
2020-06-18 19:48:12
阅读次数:
53
考试拿到题,一看,这不是权值线段树吗? 思路 使用线段树每个节点维护该区间内元素出现次数。 根据题目,对于加入、删除元素,我们可以单点修改(\(+1\)、\(-1\)),对于输出,我们可 随便 遍历找一个出现次数为 $1$ 的元素即可。 代码 具体解释见注释 #include<bits/stdc++ ...
分类:
其他好文 时间:
2020-06-07 10:45:19
阅读次数:
52