当前位置: 首页 > news >正文

权值线段树 学习笔记

前置知识:线段树

权值线段树和普通的线段树的唯一差别就是维护的内容不同,线段树维护的是每个位置。而权值线段树维护的是每个值,故称为权值线段树。

剩下可以讲的不多,每道题的方法也不一样,这里直接讲例题了。

Luogu P3369 【模板】普通平衡树

这题虽然是平衡树模板,但也可以用权值线段树解决。

首先我们设每个节点存储的是值在 \(l\sim r\) 范围内的数的个数。

发现值域过大,考虑离散化(设离散化后的节点对应到 \(1\sim n\)

考虑每一种操作:

1. 插入一个数 \(x\)

很明显只需要将 \(x\) 对应的节点值加一即可,实现方法与普通线段树无异。

2. 删除一个数 \(x\)

与操作 1 一样,只不过是将加一改为了减一。

3. 查询小于 \(x\) 的个数加一(\(x\) 的排名)

直接查询 \(1\sim x-1\) 的所有值出现个数之和即可,实现方法也与普通线段树无异。

4. 查询排名为 \(x\) 的数

这时我们只需要进行线段树二分,每次看左子树的值是否 \(\geq x\),如果是就说明在左子树里,否则就在右子树里。

5. 查询 \(x\) 的前驱

发现 \(x\) 的前驱其实就等价为排名为 \(x\) 的排名减一的数,综合 3、4 操作即可。

6. 查询 \(x\) 的后驱

这个也等价于排名为小于等于 \(x\) 的数的个数加一的数,使用 4 操作即可。

http://www.sczhlp.com/news/7698/

相关文章:

  • 2013年10月安全更新:IE、Windows内核驱动及.NET框架关键漏洞修复
  • JDK源码之Object
  • 常用输入输出小技巧
  • ADB(三)_ADBD_adbd_main()函数代码梳理
  • WinForm 实现的珠宝收银台界面
  • 零基础入门:20美元学习道德黑客技术
  • AI Compass前沿速览:Claude Opus 4.1、MiniMax-Speech 2.5、Qwen-Flash、Jules – 谷歌AI编程智能体
  • 2025年8月7日
  • Python 错误处理详解
  • 练习cf1490B. Balanced Remainders
  • 后缀
  • 六边形架构模式深度解析
  • 线段树之单侧递归
  • MySQL之InnoDB索引结构
  • fft
  • 技能特长总结2 - Charon
  • NetEase 4000纪念
  • InfluxDB 订阅(Subscription)
  • 8.7总结
  • 软考系统分析师每日学习卡 | [日期:2025-08-07] | [今日主题:位示图]
  • qt报错
  • wrk:高性能HTTPS压力测试工具使用指南
  • 自动化推理技术入门指南
  • 最高 600 万现金激励!鸿蒙 2025 开发者计划来袭,手把手教你参与
  • 进行jpeg库的移植之后,参照example.c编写的main函数,已编译通过
  • 【ganesha】函数nfs4_op_open解析
  • day1 python
  • P10255
  • 后缀数组专题
  • 题解:[HEOI2016/TJOI2016] 字符串