Advertisement

线段树区间操作分析

阅读量:

昨天回顾了过去几个月内整理的线段树区间操作相关算法笔记。尽管笔记中的注释较为丰富,但经过再次阅读后仍觉不足。为深入理解和提升学习效果,在这次复习中以初学者的身份补充了大量注释和详细说明。将线段树相关的区间操作逻辑以及涉及的运算和求值过程整合到一个自定义类中。该类分别提供了普通版和带有懒标记优化版本的操作方法。下面是代码:

复制代码
 #include<iostream>

    
 #include<stdio.h>
    
 #include<string.h>
    
 using namespace std;
    
 const int maxn=10000;
    
 /*
    
 算法中出现的左和右变量有很多不同的含义,需要区分清楚:
    
 一是问题给出的数组,(待求数组)
    
 二是保二叉树的数组,(存储数组)		待求数组在这个数组的最后,相当于子叶,前面是父节点	
    
 三是对存储数组的抽象。(满二叉树)		根节点编号为1,对应上面两个数组的0
    
 以根节点为例,节点编号使用二叉树编号0,其覆盖的范围用存储数组编号,覆盖全部,所以是0~(子叶数量)
    
 */
    
 class Tree {
    
     int first;		//第一片叶在数组中的下标为 first,在树中为0。1是根节点在数组中的位置

全部评论 (0)

还没有任何评论哟~