首页 > 其他分享 >线段树学习笔记与总结

线段树学习笔记与总结

时间:2023-07-10 10:01:30浏览次数:45  
标签:总结 单点 询问 线段 笔记 修改 区间 复杂度

线段树学习笔记与总结

目录

线段树

引入

我们经常会遇到需要维护一个序列的问题,例如给定一个整数序列,每次操作会修改序列某个位置上的数,或是海间你序列巾某个区问内所有数的和,用“暴力"算法,单点修改的复杂度为 \(O(1)\),询问区间和的单次复杂度为 \(O(N)\)。用前缀和算法,询问区间和的单次复杂度为 \(O(1)\),但单点修改的复杂度为 \(O(N)\)。这类问题的 \(m\) (询问次数)和 \(n\)(区间长度)往往是 \(10^5\) 数量级的,这两种算法都会失效。线段树就是用来处理类似这样,在序列上单点修改、区间询问(或是区间修改,单点询问,甚至是区间修改、区间询问)的间题的一种数据结构,相比于朴素算法 \(O(n^2)\) 的时间复杂度,线段快能在 \(O(nlogn)\) 的时间复杂度下解决问题

资源链接

OI Wiki - 线段树
AcWing 1 - 单点修改、区间询问
AcWing 2 - 区间修改、区间询问

模板

用结构体 struct 储存线段树更为方便

struct Node
{
    int l, r; // 区间
    type xxx; // 需要的值
}

一般有五个操作函数

void pushup()   // 由子节点更新父节点(更新所储存的值sum/max/min)
void pushdown() // 由父节点更新子节点(懒惰/延迟标记)
void build()    // 构建
void modify()   // 更改
type query()    // 查询

标签:总结,单点,询问,线段,笔记,修改,区间,复杂度
From: https://www.cnblogs.com/MingruiYang/p/17540072.html

相关文章

  • python笔记:第五章条件循环语句
    1.print和import1.1打印多个参数同时打印多个表达式,用逗号分隔print('age:',42)>age:13#注意两个表达式之间有空格不加空格的输出方式print('block'+'chain')>blockchain自定义分隔符print('L','M','C',sep='-')>L......
  • 并查集学习笔记
    什么是并查集顾名思义,并查集有两个最主要的作用:合并集合和查询某两个元素是不是在同一个集合内。或者说:并查集,在一些有N个元素的集合应用问题中,我们通常是在开始时让每个元素构成一个单元素的集合,然后按一定顺序将属于同一组的元素所在的集合合并,其间要反复查找一个元素在哪个......
  • 每日总结2023年7月9日
    今日学习:idea基本快捷键和模板(fori和sout)的学习和练习,有了这些以后发现能大大的加快我的开发速度。巩固模式分解问题,相比于昨天能够做题,判断分解是否为无损分解;事务的特性:原子性、一致性、隔离性、持续性;并发问题:丢失更新、不可重复读、读“脏”数据。一级封锁协议:防止丢失修改。......
  • 学习总结:《代码中的软件工程》
    在学习过程中,我对《代码中的软件工程》这本书有了一些深入的理解,并结合本课程的学习内容,我想就一些亮点和个人见解进行总结。通过学习,可以系统掌握软件工程这门实践与理论相结合的学科;对于复习系统知识,进阶理论来说大有裨益,本书的框架如下,推荐大家参考和阅读:•【实践为主】工欲......
  • CQBZ周考六思想总结
    cqbz周考6总结第一题veryEZ,看到mod,又只是求数量,所以直接分段探讨(毕竟可以枚举b)就彳亍了   还是感谢样例让我看到了特殊情况第二题   是我很难受的,我写了一个plus版本的,交的时候交的是原版本的,痛失50pts   为什么是50pts,因为我找人的时候是O(n)的,当时忘记lower_......
  • Hash 学习笔记与总结
    Hash算法学习笔记与总结目录Hash字符串Hash信息学奥赛一本通AcWing模板模板题题目大意CODEHash表拉链法开放寻址法模板题题目大意CODEHash哈希算法是通过一个哈希函数H,将一种数据(包活字符串、较大的数等)转化为能够用变量表示或是直接就可作为数组下标的数,道过哈希函数......
  • 高等数学笔记
    第一章函数与极限第一节映射与函数映射函数......
  • 【《C++ Primer 第四版》读书笔记】4.2.5-指针和const限定符
    1.指向const对象的指针1.1表现形式constdouble*ptr,constvoid*ptr1.2如何理解无法通过ptr这个指针变量去修改所指向内存区域的值,但是ptr这种指针变量可以重复赋值,指向不同的内存地址注意ptr这个指针变量赋值时,既可以赋值为const类型变量(书中所说的const对象)的地址,也......
  • 7.9总结
    今天上午起床后刷视频,看了会javaweb的知识,被其中软件的安装等等东西卡住了,然后就刷视频,睡觉。下午做pta,做了一点车票管理系统的框架,功能还在慢慢摸索,大约五点多,妈妈回家了,然后就和她一起去地里打药。两个人快了很多,一开始有点热,后来习惯了,回家后就吃饭,写博客。......
  • 7.09 周日总结
    今天学习了赋值运算符和关系运算符,四种逻辑运算符(与&,或|,异或^,取反!),短路逻辑运算符(&,|无论左边是否正确,右边都会执行;&&,||如果左边可以确定表达式结果,右边不会执行),三元运算符和运算符的优先级以及原码反码补码,完成了运算符部分的内容。并且复习了前面所讲的知识点,并根据所学内容......