首页 > 其他分享 >权值线段树与动态开点线段树

权值线段树与动态开点线段树

时间:2024-08-19 22:05:42浏览次数:12  
标签:值域 线段 权值 节点 mlog 动态 复杂度

权值线段树(维护一段值域)

用线段树维护桶

实质上是维护一段值域中数字出现次数

例:\(1,5,4,6,7,3,8,4,5,6\);

根: \(1-8\);
左儿子: \(1-4\);
右儿子: \(5-8\);

询问目前出现第 \(k\) 小数字

从根节点出发,如果根节点权值 \(>k\) 则证明存在第 \(k\) 小;

以此类推

问:如果值域很大,线段树炸了怎么办

动态开点线段树

最初只建根节点,代表整个区间;
需要访问某棵子树(区间)时,再建代表该区间的节点;

复杂度对比:假设某值域为 \(1-w\),普通建树要开 \(4w\) 的空间,空间复杂度 \(O(mlog_w)\);
而动态开点线段树复杂度与操作次数有关,为 \(O(mlog_w)\)。

注:动态开点线段树节点编号是按开点顺序排的。
所以我们用 \(ls,rs\) 表示左、右儿子编号。

PS:动态开点空间复杂度为 \(O(mlog_w)\) 一般来说,为保证不溢出,开到 \(mlog_{w+2}\) 比较合适,其中 \(w\) 是值域,例如若值域是 \(10^5\),那么 \(log_w≈17\),则开到 \(19\) 即可。

标签:值域,线段,权值,节点,mlog,动态,复杂度
From: https://www.cnblogs.com/WYTRL/p/18364393

相关文章

  • 动态dp
    T1一共\(n\)颗糖果,第\(i\)颗的价值为\(a[i]\),你不能连着选两颗,请问你的选到的最大价值为多少显然有如下写法:设\(dp[i][0/1]\)表示选到了第\(i\)颗,第\(i\)颗选或不选显然有转移:\(dp[i][0]=max(dp[i-1][0],dp[i-1][1])\)\(dp[i][1]=max(dp[i-1][......
  • 动态规划:找出每个位置为止最长的有效障碍赛跑路线
    目录问题定义思路解题过程复杂度code问题定义        你打算构建一些障碍赛跑路线。给你一个 下标从0开始 的整数数组 obstacles ,数组长度为 n ,其中 obstacles[i] 表示第 i 个障碍的高度。对于每个介于 0 和 n-1 之间(包含 0 和 n-1)的下......
  • 动态dp & 矩阵加速递推
    广义矩阵乘法我们定义两个矩阵\(A,B\)在广义矩阵乘法下的乘积为\(C\),其中\[C=\begin{bmatrix}\max\limits_{i=1}\limits^{m}A_{1,i}+B_{i,1}&\max\limits_{i=1}\limits^{m}A_{1,i}+B_{i,2}&\dots&\max\limits_{i=1}\limits^{m}A_{1,i}+B_{i,k}\\\......
  • 「1.1」线段
    问题背景「一本通1.1练习3」题目描述数轴上有n条线段,选取其中k条线段使得这k条线段两两没有重合部分,问k最大为多少。输入格式第一行为一个正整数 n;在接下来的 n 行中,每行有 2 个数 ai,bi,描述每条线段。输出格式输出一个整数,为 k 的最大值。样例输入1......
  • C/C++语言基础--指针三大专题详解2(指针与数组关系,动态内存分配,代码均可)
    本专栏目的更新C/C++的基础语法,包括C++的一些新特性前言指针是C/C++的灵魂,和内存地址相关联,运行的时候速度快,但是同时也有很多细节和规范要注意的,毕竟内存泄漏是很恐怖的指针打算分三篇文章进行讲解,本专题是二,介绍了指针和数组的关系、动态内存如何分配和释放等问题专题......
  • [oeasy]python0030_动态控制断点_breakpoints_debug_调试
     030_动态控制断点_breakpoints_debug_调试290播放·0赞同视频​设置断点_break_point_continue_运行到断点......
  • 动态表单后端设计
     动态表单通常用于收集各种不同类型的数据,这些数据可能随时间变化或根据用户的需求而变化。因此,数据库设计和接口设计需要足够灵活以适应不同的表单结构。以下是一些关于动态表单的数据库设计和接口设计的基本指导原则:数据库设计表单元数据表:form_id(表单ID)form_name(表......
  • 内存(动态开辟)———C语言
    内存管理: 1.C语言运行时的内存分配2.static关键字1.修饰变量局部变量:        <1>在编译的过程中,会在数据区为该变量开辟空间,如果代码中未对其进行初始化,则系统默认初始化为0。        <2>用static修饰的局部变量,会延长局部变量的生命周期#include<s......
  • Visual Studio 2013 自定义动态库dll文件lib存放路径
    前言全局说明VisualStudio2013自定义lib存放路径一、说明环境:Windows7旗舰版VisualStudio2013二、设置说明在一个功能比较全的项目中,有可能会引入第三方库来完成某些功能,为了让目录结构、文件,清晰,会将引入的dll文件,放置到一个独立目录里。这样方便管理,也便......
  • 关于MNN工程框架编译出来的静态库和动态库的使用
    一、MNN.lib文件路径如果你看过之前的博客内容,应该可以在编译的的工程当中C:\Users\Administrator\Desktop\MNN\MNN-master\MNN-CPU-OPENCL\lib\x64\lib\x64该路径下面找到debug和release两个文件夹。进入到release文件夹下面有Dynamic和Static两个文件夹,分别代表编译出来的......