一.权值线段树与线段树的区别: --权值线段树维护数的个数,数组下标代表整个值域(如果值域太大,可以离散化,后面会有介绍) --线段树则是直接维护每个数 二.权值线段树的用处 1.寻找第K大(整个区间,即左边界为1,右边界为n) 2.逆序对(呵呵归并也能求) 3.最大差& ...
更新地址:传送门 权值线段树 所谓权值线段树,就是一种维护值而非下标的线段树,我个人倾向于称呼它为值域线段树。 举个栗子:对于一个给定的数组,普通线段树可以维护某个子数组中数的和,而权值线段树可以维护某个区间内数组元素出现的次数。 在实现上,由于值域范围通常较大,权值线段树会采用离散化或动态开点的策略优化空间。 更新操作: 更新的时候,我们向线段树中插入一个值v,那么所有包含v的区间值都需要 。 ...
2018-10-23 21:54 0 1607 推荐指数:
一.权值线段树与线段树的区别: --权值线段树维护数的个数,数组下标代表整个值域(如果值域太大,可以离散化,后面会有介绍) --线段树则是直接维护每个数 二.权值线段树的用处 1.寻找第K大(整个区间,即左边界为1,右边界为n) 2.逆序对(呵呵归并也能求) 3.最大差& ...
定义: 权值线段树,基于普通线段树,但是不同。 举个栗子:对于一个给定的数组,普通线段树可以维护某个子数组中数的和,而权值线段树可以维护某个区间内数组元素出现的次数。 在实现上,由于值域范围通常较大,权值线段树会采用离散化或动态开点的策略优化空间。单次操作时间复杂度o(logn) 权值 ...
权值线段总结 权值线段树就是把线段树的每个点权,赋予一定的含义,比如数字出现的次数,数值前缀出现的次数,并用区间求和维护一个前缀信息,比如数字出现的次数,第K大等(不能实现区间第K大),前缀第K大等。 权值线段树优点: 能够比较容易实现平衡树的一系列操作 一个序列中,插入一个数,删除一个 ...
详解权值线段树 本篇随笔详细讲解一下算法竞赛中的一种数据结构——权值线段树。 前置知识 在讲解权值线段树之前,我们首先要明确:权值线段树属于一种线段树,它的本质仍然是线段树。所以在学习权值线段树之前,如果还对普通线段树并没有一个深刻的了解的话,请先移步这篇博客来学习简单线段树。 简单线段树 ...
线段树主要支持三个操作,插入,修改,查询,可能还有一些奇奇怪怪的都在这些范围内 那么原始的线段树还是有一些缺点的 比如,有太多的点没有用到,浪费了太多的空间 板子 题做的很蒙啊 主要还是对于线段树的理解问题 动态开点线段树 这个很好理解 ...
这一篇来讲讲线段树合并。 前置知识:动态开点线段树 还是一样先给一道例题:[JOI2012] Building2 题面是日文的,这里给出中文翻译: 有n">n">n个城市,它们组成了一棵树。 第i">i个城市有一座高度为Hi">Hi的建筑。 n">n">i">Hi">你需要选择一条尽量长 ...
线段树合并,就是将已有的两棵线段树合并为一棵,相同位置的信息整合到一起,通常是权值线段树 比较裸的,就是将一棵线段树的每一个位置取出来插入另一棵中 但比较高效的线段树合并可以参照可并堆的合并方式 线段树合并的原理十分简单,具体步骤如下: 对于两颗树的节点u和v ①如果u为空,返回v ②如果v为空 ...
今天学习了一下动态开点的线段树以及线段树合并吧 理解应该还是比较好理解的,动态开点的话可以避免许多空间的浪费,因为这类问题我们一般建立的是权值线段树,而权值一般范围比较大,直接像原来那样开四倍空间的话空间复杂度不能承受。 动态开点的代码如下: 因为对应位置的结点所代表 ...