权值线段树与可持久化线段树

这篇博客介绍了权值线段树和可持久化线段树的概念、用途和操作方法。权值线段树主要用于记录数组中每个数字出现的次数,支持插入删除、查询k大数、查询排名、查找前驱和后继等功能。可持久化线段树则能保存历史状态,方便回溯。文中还提供了相关模板题和AC代码供读者实践。
摘要由CSDN通过智能技术生成

权值线段树

是什么

权值线段树也是一棵线段树,但是它与普通线段树有所区别:

普通线段树记录的是一段区间 [l,r] 中的a[l]~a[r]的某种信息(如sum,max,最大连续子段和等),其叶子节点为a[i]。

权值线段树记录的是区间l~r每个数字出现的次数和,其叶子节点为 i 在数组a中出现的次数。

做什么

简单来看,权值线段树可以非常方便地查询一段区间的数字出现的次数

引申出它还可以查询x在全局中的排名(最小)、查询x的前驱(小于x的最大数)和后继(大于x的最小数)。

此外,它还有一个重要功能,就是可以用来查询区间第k大(小)值

而且权值线段树本质是一个桶,桶能做到的它也可以完成且速度更快。

怎么做

插入删除

void update(int p,int l,int r,int x,int DO)//删除或增加一个x
{
    t[p]+=DO;
    if
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值