线段树

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

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, int sta

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

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

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

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

相关推荐

投递京东等公司10个岗位
点赞 评论 收藏
分享
部门:美团-金融服务日期:9.2下午1. 为何春季美团实习结束没有考虑换部门实习(5min)2. 拷打项目(20min)● 介绍架构● 具体流程● 项目背景● 具体做了什么● 花了多久● 为什么这么做● 如何获取配置(Apollo)● Apollo宕机● Apollo缓存原理3. 场景设计(设计一个Apollo,20min)● 怎么获取配置● 配置变更● 如何设计缓存● 如何感知服务● 缓存结构● Nacos● 通过什么协议发送请求4. 拷打项目(20min)● 缓存做的什么● 缓存请求失败● 重试● 超时时间● kafka消费者内部多线程● 消费者数量超过分区数量● 优化● 项目期间抗压能力如何● 举个具体的例子● 如果mentor给你派活比别人多你怎么看● 通宵过吗● 在这个项目里成长了什么● 任选一个成长点具体举例● Bean实例化的具体过程● ApplicationContext使用● getBean()底层原理(缓存+创建)● Bean的缓存结构5. 一面表现(3min)● 觉得自己在一面中表现如何● 缺点举具体例子6. 手撕:组合问题(要求迅速写出,5min)7. 反问(10min):● 部门规模● base地● 对于个人的提升建议● 多久出结果● 我的Apollo(美团内部叫Lion)设计是否合理● 分布式事务思想如何具体运用总时长1h20+min体验:面试官是主管,专业能力很强,擅长引导人,全程拷打,问的非常深,项目潜在问题问的很细,被拷打晕了。
点赞 评论 收藏
分享
评论
4
3
分享

创作者周榜

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