SGTtrick

博客详细介绍了线段树的核心函数pushdown和pushup,以及update和query操作。通过分析这些函数的功能,作者提出可以重载运算符简化实现,并提供了一个通用的线段树框架。此外,还讨论了线段树的DFS和BFS两种实现方式,尽管BFS版本在某些情况下可能效率较低。
摘要由CSDN通过智能技术生成

SGTtrick

B y   蒟 蒻   l d x o i By\ 蒟蒻\ ldxoi By  ldxoi

Chapter 1.关于线段树操作的一些分析

我们知道,线段树有两个核心的函数 p u s h d o w n pushdown pushdown p u s h u p pushup pushup

以及两类对于一段区间进行操作的函数 u p d a t e update update q u e r y query query

博主在这里简单讲一下几个函数的功能:

首先我们假设用 V a l Val Val表示维护信息的类型, T a g Tag Tag表示懒标记的类型。

显然一个线段树节点(类型为 N o d e Node Node)是由一个 V a l Val Val元素和一个 T a g Tag Tag以及表示区间管辖范围的 l , r l,r l,r构成的。

struct Tag{
   ...};
struct Val{
   ...};
struct Node{
   Val val;Tag tag;int l,r;}T[N<<2];
  • p u s h d o w n ( i n t   p ) pushdown(int\ p) pushdown(int p)表示将 p p p的标记下传给 p p p的儿子并更新它们的信息和标记
  • p u s h u p ( i n t   p ) pushup(int\ p) pushup(int p)表示把 p p p儿子的信息合并成 p p p的信息
  • q u e r y ( i n t   p , i n t   q l , i n t   q r ) query(int\ p,int\ ql,int\ qr) query(int p,int ql,int qr)表示查询区间 [ q l , q r ] [ql,qr] [ql,qr]的一些信息
  • u p d a t e ( i n t   p , i n t   q l , i n t   q r , T a g   v ) update(int\ p,int\ ql,int\ qr,Tag\ v) update(int p,int ql,int qr,Tag v)表示用标记 v v v对区间 [ q l , q r ] [ql,qr] [ql,qr]的信息和标记进行更新

可以看出来这些函数分成两类:

  • 父亲朝儿子转移: u p d a t e , p u s h d o w n update,pushdown update,pushdown
  • 儿子朝父亲转移: q u
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值