首页 > 其他分享 >线段树

线段树

时间:2025-01-06 22:44:35浏览次数:8  
标签:二元 线段 区间 维护 节点 运算

前言

线段树用来解决区间问题。
包括并不限于:\(RMQ\),整数区间求和等问题。
通常的:可用来求下标连续区间二元运算后结果(比如群\((\mathbb{G},*)\)) 。
而线段树的题一般用来选择合适的集合(比如矩阵,线性基等) 。
并在合适的时间复杂度内维护二元运算 \(*\) 。
同时可以理解为分治的一种。
维护二元运算符的过程可以理解为分治中答案合并的过程。
同时因为群满足结合律,所以可以用懒标记表示这个点被修改过。
对于有多种二元运算的需要考虑多种不同运算之间的影响。

免责声明:(没学过抽象代数,可能理解比较浅显)

定义

每个节点维护一个区间的信息。
把区间分成两个区间且满足左右区间相差不超过一
易得:线段树的深度不会超过\(logn\)级别(保证时间复杂度正确)。

算法流程

建一颗线段树:

  1. 开一个新节点,并清空。
  2. 递归边界:到达叶子节点。
  3. 建左右子树。

查询 \((\) 修改 \()\):

  1. 递归边界:

当前区间不合法,返回单位元。
当前区间完全在查询区间内返回区间维护值 \((\) 更新 \()\) 。

  1. 下传。
  2. 修改左右子树。
  3. 上传。

[ZJOI2017] 树状数组
[HEOI2016/TJOI2016] 排序

标签:二元,线段,区间,维护,节点,运算
From: https://www.cnblogs.com/CWish/p/18606017

相关文章

  • 线段树优化 dp 学习笔记
    到底是什么算法让我觉得两道题就足以让我写一篇学习笔记呢?虽然两年半以前写过一道dp,正解的优化是单调队列,但是我拿线段树过了(卡着空间过的),所以那个dp并不能叫线段树优化dp。CF115ELinearKingdomRaces这个算是最“原汁原味”线段树优化dp。设\(dp_{i,j}\)表示第\(j\)......
  • 模仿jiangly封装的线段树单点修改模板
    https://codeforces.com/contest/2057/problem/D#include<bits/stdc++.h>usingnamespacestd;#definexfirst#defineysecond#defineintlonglong#defineendl'\n'constintN=1e6+10,mod=998244353,INF=1e16;typedefpair<int,int>PI......
  • 线段树进阶练习专题
    小白逛公园题目大意:求一段区间里最大子段和思路:有空补(code:#include<bits/stdc++.h>usingnamespacestd;constintMAXN=500100;intm,n;inta[MAXN];inlineintread(){ intx=0,f=1; charch=getchar(); while(ch>'9'||ch<'0'){ if(ch==&#......
  • P2572 [SCOI2010] 序列操作 —— 线段树
    题意原题给定一个0/1序列,初始全为零要求分别实现:-区间赋值-区间取反-询问区间1的个数-询问区间为1的最大子段和分析形式化地定义变量,我们记下区间的0/1个数,0/1最大字段和,赋值与取反标记。赋值的标记优先级大于取反标记,取反直接把区间赋值标记,区间0/1个数和最大子段和交换......
  • 线段树合并学习笔记
    前言模拟赛solution里说只需要利用线段树合并的思想……但是我不会线段树合并,就先学习了线段树合并。引入线段树合并是把每个对应节点合并。两棵线段树都有某个节点,就是把这两个点合成一个点;只有一棵线段树有某个节点,合并出来的线段树的这个节点就是这个唯一的节点。......
  • 线段树优化建图
    更新日志2025/01/05:开工。概念利用线段树优化建图。一般情况下,会出现点和区间或区间和区间连边的情况,就可以考虑线段树优化建图了。思路开两棵线段树,一棵储存入边,一棵储存出边。每个节点都代表对应的区间。入树中每个点都指向其子节点,出树中相反。区间连边时,在对应线......
  • P10145 [WC2024] 线段树 题解
    P10145[WC2024]线段树题解\(\mathcalO(4^{n})\)做法对于线段树上的一个节点区间\([l,r)\)我们连无向边\((l,r)\),那么可以用加减表示出一个区间\([L,R)\)等价于\(L,R\)两点联通。于是可以枚举每条边选或不选,用可撤销并查集判断两点是否联通,复杂度\(\mathcalO(2^{2......
  • 线段树综合
    线段树即使是最基础的线段树也有很多应用,比如什么优化dp啦,标记的神奇维护啦……需要思路灵活一点,把题目条件抽象成更为简单的形式扫描线求矩形面积并,周长,二维数点等等线段树作用即把静态O(n^2)变为动态O(nlogn).想象过程,就是在一张图上,一条线从上到下扫描。所以线段树本质维......
  • 线段树总结
    线段树你说的对,但线段树是一种用\(O(n\cdotlog\n)\)的大常数复杂度+略微的卡常下技巧=AC的妙妙数据结构。线段树是基于分治与二叉树的在线工具,可以维护区间信息,但比树状数组能够维护的东西更多。线段树虽然能够维护的东西更多,但也有一些特别显著的缺点:代码量过长。......
  • 线段树从入门到出门
    线段树详介(带lazy)线段树和树状数组不同,它维护的是一个个子序列。如上图,对于一个区间\([l,r]\),它的左儿子就是\([l,mid]\),右儿子就是\([mid+1,r]\),其中\(mid=\frac{l+r}{2}\)。我们可以给线段树上的每一个结点编号,假设父节点编号为\(x\),左儿子编号就是\(x\times......