一:定义首先要明确线段的定义,线段是一颗,而且是完全二叉。同时线段的每个节点表示一个区间,左子树和右子树分别表示这个区间的左半边和右半边。即将区间[L,R]分解成[L,MID]和[MID+1,R],假设根的高度为1,高为(n>1)下图展示了区间[1,13]的分解过程二:原理上图中每个节点存储自己对应区间的信息。(1)单点修改假设要修改1号节点,不难发现只要修改[1,13]、[1,
转载 2023-10-21 11:51:41
53阅读
本篇对应的是luogu的线段1概况:如下图就是一棵线段线段树上的每一个点记录的都是一个区间,所以线段支持对于区间和点的动态操作,可以在线查询和更改区间上的最值,求和等时间复杂度:O(n)  使用线段的情况:  满足区间加法:已知左右两子树的全部信息,一定能够推出父节点       线段维护的内容根据题目的要
1.线段(最大值)线段#include<iostream>#include<string>#include<algorithm>using namespace std;const int MAXNODE = 1 << 19;const int MAXN = 2e6 + 10;struct NODE { int valu...
原创 2022-10-26 20:01:55
91阅读
线段的入门级 总
转载 2022-07-29 15:00:10
156阅读
public class SegmentTree { public static void main(String[] args) { SegmentTree tre
原创 2022-12-12 16:25:29
42阅读
线段不是完全二叉,是平衡二叉 堆也是平衡二叉
原创 2022-08-05 22:28:50
152阅读
模板题 解析 先转化一下,发现每次放一个立方体,就是对一个二维平面赋值,最后查询其实就是查询二维平面的最大值。 本体强制在线,所以就要用到我们的二维线段。 刚开始学的时候很容易因为什么对外层建一棵,对内层建一棵而懵逼,但是其实写一下就能搞懂了。 我们对 \(x\) 轴维护一颗线段线段 ...
转载 2021-09-10 16:50:00
616阅读
2评论
什么是线段线段是一种二叉搜索,它将一个区间
原创 2022-06-17 14:13:05
120阅读
线段是一种二叉搜索,与区间相似,它将一个区间划分成一些单元区间,每个单元区间对应线段中的一个叶结点。对于线段中的每一个非叶子节点[a,b],它的左儿子表示的区间为[a,(a+b)/2],右儿子表示的区间为[(a+b)/2+1,b]。因此线段是平衡二叉,最后的子节点数目为N,即整个线段区间的长度。使用线段可以快速的查找某一个节点在若干条线段中出现的次数,时间复杂度为O(logN)。而
原创 2015-10-06 20:35:11
621阅读
这里不详细介绍,想仔细学的这里有http://ww...
原创 2021-08-11 13:55:35
105阅读
早就要学主席了,可是发现自己连线段都不会了。 然后重学线段 搞了几波例题,感觉还不错,不管是状态(自己的)还是细节,还是思路都是有的。 这道题呢 一道算是对5个月前的我来说比较鬼畜的题了。 但是对现在的我的话却是如此简单,尽管浏览了一遍以前的代码。*(我还是会的 考虑lazy tag 先加后乘
转载 2019-02-21 17:31:00
154阅读
2评论
一、基础操作:区间求和 #include <bits/stdc++.h> using namespace std; typedef long long ll; const int maxn=100010; int in[maxn+2];//数据初值 struct tree{ int l,r; ll lazy,sumn; }a[4*maxn+9]; void build(int p...
原创 2021-08-26 15:29:03
78阅读
第一类 区间查询与区间求和F. Building Numberstime limit per test3.0 smemory limit per test256 MBinputstandard inputoutputstandard outputIn this pro...
转载 2017-10-08 10:30:00
107阅读
2评论
#解决问题: 在数组区间中 更新某个数字(updata); 求数组某区间和(query); 解决方法一and 二 ###一. 直接用数组 方法:略 分析: updata复杂度是O(1) -但 query复杂度O(n) 二. 前缀和 方法: sum_a[i]=a[1]+...+a[i] 求解区间和时: ...
转载 2021-08-24 08:36:00
70阅读
2评论
线段概述 线段是一种二叉搜索,它将一个区间划分成一些单元区间,每个单元区间对应线段中的一个叶节点。 线段是建立在线段的基础上,每个结点都代表了一条线段[a , b]。长度为1的线段称为元线段。非元线段都有两个子结点,左结点代表的线段为[a , (a + b ) / 2],右结点代表的线段为[( a + b ) / 2 + 1 , b]。 它的优势在于可以基本保证每个操作的复杂度为O(lgn). 上图是一个非常简单的线段。 基本操作 一棵线段一般要支持三种操作:建树(build)、查询(search)和更新(update)。 建树 ...
转载 2013-06-22 12:02:00
92阅读
2评论
线段 第一部 概念引入 线段是一种二叉,也就是对于一个线段,我们会用一个二叉来表示。比如说一个长度为4的线段,我们可以表示成这样: 性质:节点i的权值=她的左儿子权值+她的右儿子权值。 我们知道,一颗二叉,她的左儿子和右儿子编号分别是她*2和她*2+1再根据刚才的性质,得到式子:tree[ ...
转载 2021-09-08 16:39:00
123阅读
2评论
import java.util.Scanner; public class Main { static class SegmentTree { // arr[]为原序列的信息从0开始,但在arr里是从1开始的 // sum[]模拟线段维护区间和 // lazy[]为累加懒惰标记 // chang ...
转载 2021-10-12 15:26:00
87阅读
2评论
树结构的基本思想是分割。普通二叉搜索是按对象来进行划分,效果往往和数据结构内对象有关;而线段是根据关键码的可能范围来分的,这种技术叫做关键空间分解!线段的处理对象是线段(一般意义上的区间可以抽象成线段),它把线段组织成利于检索和统计的形式
原创 2022-01-05 16:22:41
64阅读
线段是一种二叉搜索,与区间相似,它将一个区间划分成一些单元区间,每个单元区间对应线段中的一个叶结点。对于线段中的每一个非叶子节点[a,b],它的左儿子表示的区间为[a,(a+b)/2],右儿子表示的区间
原创 2022-08-06 00:02:50
99阅读
参考:线段 模板题:线段模板 写线段
原创 2022-11-03 15:23:07
22阅读
  • 1
  • 2
  • 3
  • 4
  • 5