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

【线段树模板】

 介绍


这段代码看起来是一个基于树结构的数据结构,可能是线段树或者其他类似的数据结构。主要包含了构建数据结构、查询和修改等基本操作的实现函数。以下是对每个函数的简要介绍:

  • pushup(int u): 用于计算结点u的属性。
  • build(int u, int l, int r): 用于构建数据结构,对应范围为[l, r],包括对叶子结点的初始化和非叶子结点的递归初始化。
  • query(int u, int l, int r): 用于查询范围[l, r]内的属性,包括全中和部分命中的处理逻辑。
  • cal(Node &t, int lazy): 用于计算属性和更新标记。
  • pushdown(int u): 用于向下传递更新标记,并清空当前结点的标记。
  • modify1(int u, int x, int v): 用于修改位置x处的属性,包括叶子结点和非叶子结点的处理逻辑。
  • modify2(int u, int l, int r, int v): 用于修改区间[l, r]内的属性,包括全中和部分命中的处理逻辑。

整体而言,这段代码主要是关于构建、查询和修改基于树结构的数据结构的函数实现,通过递归、计算和更新标记等操作,实现对数据结构的操作和查询。

模板

void pushup(int u)
{
    // 结点u属性计算
}
void build(int u, int l, int r) // u表示结点(传递这个是为了左右递归),对应范围[l, r]
{
    // 叶子结点直接初始化
    // 非叶子结点左右递归初始化,得到左右子结点信息后再初始化当前结点pushup
}
void query(int u, int l, int r) // 这里[l, r]是查询区间
{
    // 全中直接返回性质
    // 部分命中看左右,先结算标记pushdown,若存在命中,递归查询,最后联合计算,返回联合结果return union_property
}
void cal(Node &t, int lazy)
{
    // 进行属性的计算
    // 进行标记的更新(当前考虑了更新标记,下层没有,因此递归之前需要pushdown)
}
void pushdown(int u)
{
    // 拿着当前结点的标记递归更新左右(调用cal)
    // 清空当前标记
}
void modify1(int u, int x, int v) // x是修改位置, v是增量
{
    // 叶子结点直接修改cal
    // 非叶子结点先看左右,若包含x,递归修改,最后重整当前节点pushup
}
void modify2(int u, int l, int r, int v) // [l, r]是修改区间, v是增量
{
    // 全中直接修改cal
    // 部分命中看左右,先结算标记pushdown,若存在命中,递归修改,最后重整当前结点pushup
}

其它细节 

细节:如从1开始

参考题

不带懒标记https://blog.csdn.net/m0_73669127/article/details/145652803?spm=1001.2014.3001.5502带两个懒标记https://blog.csdn.net/m0_73669127/article/details/144005011?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522a1794d5fd6e3b23ba583de5199a7b54b%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fblog.%2522%257D&request_id=a1794d5fd6e3b23ba583de5199a7b54b&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~blog~first_rank_ecpm_v1~rank_v31_ecpm-3-144005011-null-null.nonecase&utm_term=%E7%BA%BF%E6%AE%B5%E6%A0%91&spm=1018.2226.3001.4450

相关文章:

  • 今日AI和商界事件(2025-02-15)
  • Halo 配置QQ邮箱验证教程
  • jenkins 配置ssh拉取gitlab
  • 基于nuScenes数据集和DeepSeek模型的端到端自动驾驶解决方案
  • 文件夹上传到github分支最后github上面还是没有文件和文件夹
  • 3.从零开始学会Vue--{{生命周期,工程化,组件化}}
  • 素数环(信息学奥赛一本通-2110)
  • 对于简单的HTML、CSS、JavaScript前端,我们可以通过几种方式连接后端
  • C++ Primer 返回值和return语句
  • 数组_长度最小的子数组
  • 1-2 gitee创建远程仓库
  • 题解:洛谷 P4054 [JSOI2009] 计数问题
  • Beszel监控Docker安装
  • 变相提高大模型上下文长度-RAG文档压缩-3.优化map-reduce(reranker过滤+社区聚类)
  • 华为云kubernetes基于keda自动伸缩deployment副本(监听redis队列长度)
  • Redis进阶使用
  • 利用ollama 与deepseek r1大模型搭建本地知识库
  • 腿足机器人之六- 前向运动学
  • 2025-02-15 禅修-若分别性,离尘无体,斯则前尘分别影事
  • RAMinit 程序编译运行考古记录
  • 科创板年内第3家!健信超导IPO获受理,拟募资8.65亿
  • 文学花边|对话《借命而生》原著作者石一枫:我给剧打90分
  • 国家统计局今年将在全国开展两次人口固定样本跟访调查
  • 专访|家人眼中的周碧初:用色彩写诗,实践油画“民族化”
  • 重庆三峡学院回应“中标价85万设备网购300元”:已终止采购
  • 巴基斯坦外长:近期军事回应是自卫措施