线段树

欢迎在评论区留言和订阅专栏!

线段树是一个和树状数组差不多的数据结构,下面我就来讲一讲。

1.简介

线段树树状数组都是在线算法(前面讲过),与树状数组功能一样,是一种可以快速区间操作的算法

线段树一共有4个步骤,分别是:建树、pushdown、指定点加值和查询,并且附有main函数。

2.代码

1.建树

int n,m,sum[100005],lazy[100005],a[100005];
//递归建树
void built(int node, int start, int end){
	if (start == end) sum[node] = a[start];
    else{
    	int mid = (start + end) / 2;
        //二分
        built(node*2+1, start, mid);
        built(node*2+2, mid+1, end);
        
        sum[node] = sum[node*2+1] + sum[node*2+2];
    }
}

2.pushdown

void pushdown(int node, int start, int end){
	if (lazy[node] != 0){
    	int mid = (start+end)/2;
        sum[node*2+1] += lazy[node] * (mid-start+1);
        sum[node*2+2] += lazynode] * (end-mid);
        lazy[node*2+1] += lazy[node];
        lazy[node*2+2] += lazy[node];
        lazy[node] = 0;
	}
}

3.指定点加值

void add(int node, i

剩余60%内容,订阅专栏后可继续查看/也可单篇购买

c++算法大全 文章被收录于专栏

本专栏收集了c++大部分基础算法,附有简介和代码。

全部评论
用了挺多的二分呀!
2 回复 分享
发布于 2025-08-28 17:54 北京
lazy数组是干啥的呀
点赞 回复 分享
发布于 2025-09-02 11:33 北京
二分是用来查询左节点和右节点。左节点是2n+1, 右节点是2n+2。
点赞 回复 分享
发布于 2025-08-28 19:11 北京

相关推荐

白火同学:1、简历可以浓缩成一页,简历简历先要“简”方便HR快速过滤出有效信息,再要“历”用有效信息突出个人的含金量。 2、教育背景少了入学时间~毕业时间,HR判断不出你是否为应届生。 3、如果你的平台账号效果还不错,可以把账号超链接或者用户名贴到对应位置,一是方便HR知道你是具体做了什么内容的运营,看到账号一目了然,二是口说无凭,账号为证,这更有说服力。
面试被问期望薪资时该如何...
点赞 评论 收藏
分享
牛客44320985...:你的当务之急是把这个糖的要死的沟槽ide主题改了
点赞 评论 收藏
分享
评论
5
3
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务