树型结构——树状数组

目录

1.树状数组的引入

2.基本操作:主要包括 插入操作,查询操作.

3.具体实现:

例题:1.楼兰图腾

241. 楼兰图腾

2.一个简单的整数问题

3.一个简单的整数问题2


1.树状数组的引入

树状数组是用来解决区间修改-单点查询以及单点修改-区间查询和区间修改-区间查询问题的一种优化时间的算法。

这里推荐B站视频歪瑞古德:〔manim | 算法 | 数据结构〕 完全理解并深入应用树状数组 | 支持多种动态维护区间操作_哔哩哔哩_bilibiliicon-default.png?t=M276https://www.bilibili.com/video/BV1pE41197Qj?from=search&seid=13866619238299900297&spm_id_from=333.337.0.0

简单来说,如果一个问题能转变成上述三个问题,就可以使用树状数组,将修改和查询操作的时间复杂度从O(n)优化到O(log n),树状数组是一种简单的数据结构。

2.基本操作:主要包括 插入操作,查询操作.

3.具体实现:

这里以区间求和问题作为例子。

也就是区间修改,区间求和

插入操作:

void add(int tr[],int x,int c){
	for(int i=x;i<=n;i+=lowbit(i)) tr[i]+=c;
}

查询操作:

int sum(int tr[],int x){
	int res=0;
	for(int i=x;i;i-=lowbit(i)) res+=tr[i];
	return res;
}

例题:1.楼兰图腾

如何把一个问题转换成区间修改,区间查询,是解决树状数组问题的关键,另外能用树状数组解决的问题也可以用线段树解决。

241. 楼兰图腾

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

litian355

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值