首页 > 其他分享 >数据结构——线段树

数据结构——线段树

时间:2024-04-04 09:59:38浏览次数:14  
标签:结点 int 线段 st 数组 区间 数据结构

本来是想先写树状数组的,但想到要在树状数组里面用到这篇文章,就先写这个了。

线段树的思想

线段树是在用一颗树存一个数组中的所有数以及他们所有的2的次方数长度的区间,具体样子如下:

                                            [1~8]

                                         /              \

                                       /                   \

                                  [1~4]                [5~8]

                                /         \                /          \

                           [1~2]    [3~4]     [5~6]     [7~8]

                         /        \      /      \     /      \      /         \

                      [1]        [2] [3]  [4] [5]  [6][7]          [8]

而其中,每个节点可以维护数列的区间最大值、最小值和区间和。

线段树分层讲解

第一步:建树

树虽然是一个二维的图形,但是肯定要存到一个数组中去对不对?

所以我们肯定需要给每个点表上一个唯一的编号

建设一棵子树,它的根的编号是i,则我们设它的左儿子的编号是2*i+1,它的右儿子的编号是2*i+2

于是我们就要递归建树,每次把区间分成两半,分开递归,然后遇到叶子结点就直接把输入数组的值赋值到叶子结点中,代码很简单:

//这是维护区间和的代码
void build(int id,int st,int en){                //建树
    if (st==en){                                 //遇到了叶子结点
        tree[id]=a[st];                          //把输入的值赋值给叶子
        return ;
    }
    

标签:结点,int,线段,st,数组,区间,数据结构
From: https://blog.csdn.net/m0_68936950/article/details/136989390

相关文章

  • JS Graph (图-数据结构)
    Code:/***基于邻接表实现的无向图*@class*/classGraphAdjList{/***@type{Map<any,any[]>}*/adjList;/***构造函数*@constructor*@param{[any,any][]}edges*/constructor(edges){this.a......
  • 数据结构与算法
    1.1数据结构的研究内容程序=数据结构+算法  ———程序的本质 例1:图书管理系统操作对象:若干行数据记录操作算法:查询、插入、删除、修改等操作对象之间的关系:线性关系数据结构:线性数据结构、线性表例2:文件系统的结构图如图可以看到,这是一个典型的树型结构问题,数据......
  • 数据结构——从入门到入土
    链表的建立及遍历:分为如下几步:声明链表这种结构,比如:点击查看代码typedefstructnode*listlink;//定义一个指针类型名称,使指针变量能像其他变量那样声明,而不需要在每个指针变量前加*typedefstructnude(){intdata;structlistlinknext;}LNode;//声明......
  • 数据结构与算法分析实验3 [进阶]通过链表实现多项式加法和乘法
    文章目录大致内容介绍多项式加法代码一览头文件Poly.h内容如下:实现文件Poly.cpp内容如下:初始化增加元素删除元素功能函数遍历函数清除销毁打印多项式向多项式内插入一个元素源文件main.cpp内容如下:实现效果:多项式乘法实现方法:在Poly.h中添加声明:在Poly.cpp中添加实现:在......
  • 数据结构——队列(包括循环队列)——Java版
    目录队列介绍:基本概念:应用:Java实现示例:循环队列的Java实现:队列介绍:队列(Queue)是一种常见的数据结构,它按照先进先出(FIFO,First-In-First-Out)的原则管理数据。在现实生活中,队列的概念很容易理解,就像是排队等待服务的人群一样。在计算机科学领域,队列同样扮演着重要的角色,在......
  • MySQL索引背后的数据结构及算法原理
    摘要本文以MySQL数据库为研究对象,讨论与数据库索引相关的一些话题。特别需要说明的是,MySQL支持诸多存储引擎,而各种存储引擎对索引的支持也各不相同,因此MySQL数据库支持多种索引类型,如BTree索引,哈希索引,全文索引等等。为了避免混乱,本文将只关注于BTree索引,因为这是平常使用MyS......
  • python常见数据结构及方法
    Python提供了多种内置的数据结构,这些数据结构非常灵活且功能强大,能够满足各种程序设计需求。下面是一些最常用的Python数据结构及其内置方法的详细说明:1.列表(List)列表是Python中最基本的数据结构之一。列表可以包含不同类型的元素,包括另一个列表。常用内置方法:append(x......
  • 【数据结构与算法篇】动态顺序表实战项目:通讯录
    【数据结构与算法】动态顺序表实战项目:通讯录......
  • 深入理解数据结构第二弹——二叉树(2)——堆排序及其时间复杂度
    看这篇前请先把我上一篇了解一下:深入理解数据结构第一弹——二叉树(1)——堆-CSDN博客前言:相信很多学习数据结构的人,都会遇到一种情况,就是明明最一开始学习就学习了时间复杂度,但是在后期自己写的程序或者是做到哪个需要判断时间复杂度的题时,仍然判断不出来时间复杂度是多少,今......
  • PTA数据结构第四章7-2 变身(八进制转成十进制)
    分数20作者 陈晓梅单位 广东外语外贸大学题目给出一个由18位八进制数字组成的序列,要求每六位转成一个十进制数并输出。输入格式:18位八进制数字组成的序列。输出格式:输出转换后的三个十进制数,以空格分隔,行末不能有空格。输入样例:000023452230567134输出样例:......