首页 > 其他分享 >关于区间加区间查线段树的标记永久化

关于区间加区间查线段树的标记永久化

时间:2024-08-11 21:49:32浏览次数:6  
标签:标记 线段 修改 永久化 区间 节点

单点加区间查的线段树,每个线段树区间的值代表所维护序列在这个区间的总和;区间加单点查的线段树,每个线段树区间的值代表对这个区间总体加了多少。区间加区间查的线段树可以通过综合两种思想实现标记的永久化。

线段树将每一个修改或查询区间拆分为 \(O(\log w)\) 个线段树区间,只要保证每次操作只访问这些线段树区间和它们的祖先就能保证正确的复杂度。考虑每一个询问的线段树区间的答案由哪些修改区间贡献。情况1,如果一个修改完全被线段树区间包含或者部分交叉,那么处理这个修改的时候就会路过该节点,因此这个修改为该节点带来的贡献可以直接在该节点算清。情况2,如果一个修改完全包含了某线段树节点,处理修改的时候是不可能走到这个节点的,但我们可以在查询到这个节点的时候处理:记下从根到该节点的路径上所有这样的修改带来的贡献,与该节点自身已经算好的情况1的答案,加在一起就是所有情况的最终答案。因此每个节点需要存储一个累计值和一个标记,前者记录节点子树内的所有修改对该节点的贡献,后者记录在根到该节点路径上的所有修改对该节点整个子树的贡献。把贡献分成到根的路径和子树这样的两部分即可实现标记永久化。

标签:标记,线段,修改,永久化,区间,节点
From: https://www.cnblogs.com/nkxjlym/p/18353961

相关文章

  • 李超线段树
    P4097【模板】李超线段树/[HEOI2013]Segment-洛谷|计算机科学教育新生态(luogu.com.cn)要求在平面直角坐标系下维护两个操作:在平面上加入一条线段。记第\(i\)条被插入的线段的标号为\(i\)。给定一个数\(k\),询问与直线\(x=k\)相交的线段中,交点纵坐标最大的线......
  • 线段树:线段树的定义和应用
    引言线段树是一种高级数据结构,用于解决区间查询和更新问题。它在许多应用中都有广泛的使用,例如数组区间的求和、最小值/最大值查询、区间的最小公倍数/最大公约数查询等。本文将详细介绍线段树的定义、构建、应用以及代码实现。目录线段树的定义线段树的应用线段树的构建......
  • P3834 【模板】可持久化线段树 2
    原题链接题解总体上来讲,就是二分\(x\)查询插入\(l-1\)时有多少数小于等于\(x\),查询插入\(r\)时有多少数小于等于\(x\)然后减一减,看看是不是小于等于\(k-1\)我认为目前没有比ai讲的更清楚的了,请点击这里code#include<bits/stdc++.h>usingnamespacestd;/*#def......
  • 线段树优化建图
    今天写了道线段树优化建图的板子题,感觉学算法的还是要记录下来,将来方便复习也算是对竞赛生涯的一种回忆http://codeforces.com/problemset/problem/786/B,洛谷评级还是省选,如果是比赛现场想出来确实厉害,但是现在嘛,已经是时代眼泪了归纳下特点:和区间有关的图论问题直接上代码讲解......
  • 刍议线段树 2 (区间修改,区间查询)
    线段树\(2\)接上一讲https://www.cnblogs.com/yingxilin/p/18350988(没看的同学们可以先看这篇)上一讲里我们已经介绍了单点修改,区间查询的线段树了。在这一讲里,我们开始学习支持区间修改,区间查询的线段树。考虑之前的做法,之前的查询区间会被分为\(O(logn)\),从而求解,但因为......
  • 线段树维护区间方差
    线段树维护区间方差方差区间方差还教室解题思路:利用线段树维护\(a_i\)与\(a_i^2\)\((1\leqi\leqn)\)两个数列,然后使用一个\(lazytag\)来记录是否进行了区间加,最后输出方差的时候使用$$s^2=\sum\limits_{i=1}^n(a_i-\overlinea)^2=(\sum\limits_{i=1}......
  • 洛谷 P3870 开关之线段树板子
    洛谷P3870题解传送锚点摸鱼环节[TJOI2009]开关题目描述现有\(n\)盏灯排成一排,从左到右依次编号为:\(1\),\(2\),……,\(n\)。然后依次执行\(m\)项操作。操作分为两种:指定一个区间\([a,b]\),然后改变编号在这个区间内的灯的状态(把开着的灯关上,关着的灯打开);指定一个区间......
  • 8.9 线段树板子+三分补题+三维的bfs
    nowcoder训练区间线段树板子题,我们只需要把区间每一个点设置成1,然后修改的时候直接改点,然后查区间就行线段树维护最大字段和/01串最大连续1的个数模板题。把白色和黑色看成1/0两个数就行了。#include<bits/stdc++.h>usingnamespacestd;usingi64=longlon......
  • 【线段树合并/树上差分】[P4556 [Vani有约会] 雨天的尾巴 /【模板】线段树合并
    【线段树合并/树上差分】P4556[Vani有约会]雨天的尾巴/【模板】线段树合并思路对\(x,y,lca(u,v),fa_{lca(u,v)}\)四个点进行树上差分,然后用线段树合并动态权值线段树。#include<bits/stdc++.h>usingnamespacestd;usingi64=longlong;template<classNode>str......
  • 线段树合并模板
    template<classNode>structPersidentSegmentTree{#definelc(u)tr[u].l#definerc(u)tr[u].rconstintn;inttot=0;vector<Node>tr;vector<int>root;PersidentSegmentTree():n(0){}PersidentSegmentTree(in......