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

可持久化线段树

可持久化线段树

模板

在某一指定版本的单点查,单点修。

m m m 棵线段树,每次修改复制后单点修。时间复杂度 O ( m ( n + log ⁡ n ) ) O(m(n+\log n)) O(m(n+logn)),空间复杂度 O ( n m ) O(nm) O(nm),不如暴力。

每次修改的时候,影响的点是 log ⁡ n \log n logn 级的,其余点均不受影响。因修改而新建线段树时,可以利用未修改的点,做到 O ( m log ⁡ n ) O(m \log n) O(mlogn)

具体实现动态开点即可,空间复杂度 O ( m log ⁡ n + n ) O(m \log n+n) O(mlogn+n),注意线段树自身的常数。

代码

静态 kth

模板

l − 1 , r l-1,r l1,r 棵线段树形态相同,可以相减得到区间答案。

离散化,二分答案,每次统计区间内小于他的个数。这个过程可以用可持久化线段树实现,时间复杂度 O ( m log ⁡ 2 n ) O(m \log ^2n) O(mlog2n)

事实上,这个过程可以做到 O ( m log ⁡ n ) O(m \log n) O(mlogn)。即查询时,记左子树区间的数量为 L L L L ≥ k L \ge k Lk,则在左子树中继续找第 k k k 大;否则右子树找第 k − L k - L kL 大。

http://www.lryc.cn/news/163829.html

相关文章:

  • 运行 Node.js 与浏览器 JavaScript
  • File类操作
  • C# 实现电子签名
  • 小米6/6X/米8/米9手机刷入鸿蒙HarmonyOS.4.0系统-刷机包下载-遥遥领先
  • 集合框架和泛型二
  • thinkphp6 入门教程合集(更新中)
  • openGauss学习笔记-65 openGauss 数据库管理-创建和管理数据库
  • mysql、MHA高可用配置即故障切换
  • 使用“vue init mpvue/mpvue-quickstart“初始化mpvue项目时出现的错误及解决办法
  • Linux-Shell整理集合
  • windows环境下node安装教程(超详细)
  • 《TCP/IP网络编程》阅读笔记--并发多进程服务端的使用
  • 【C++】day2学习成果:引用、结构体等等。。。
  • QT 第五天 TCP通信与数据库
  • Java程序中常用的设计模式有哪些和该种设计模式解决的痛点
  • Android12之解析/proc/pid进程参数(一百六十四)
  • 正儿八经的雅思口语盘丝洞大法学习总结(长期修改更新)针对23.9月考生
  • 算法竞赛入门【码蹄集新手村600题】(MT1260-1280)C语言
  • qt连接tcp通信和连接数据库
  • MySQL Oracle区别
  • Figma实用插件速收藏!精选19个干货插件大公开!
  • 【STM32】FSMC—扩展外部 SRAM 初步使用 1
  • 保姆级教程 --redis启动命令
  • 【C++】构造函数分类 ① ( 构造函数分类简介 | 无参构造函数 | 有参构造函数 | 拷贝构造函数 | 代码示例 - 三种类型构造函数定义与调用 )
  • 胡焕庸线,我国东西地级市分布密度分界线
  • 里氏替换原则在继承关系中子类对父类方法的重写(覆盖)或重载时应遵循的规则
  • 【脑机接口开源数据处理包】brainflowBrainFlow是一个库,旨在获取,解析和分析脑电图,肌电图,心电图和其他类型的数据从生物传感器。
  • #452. 序列操作
  • 《Python深度学习-Keras》精华笔记3:解决深度学习多分类问题
  • 区块链世界的大数据入门之zkMapReduce简介