树状数组板子(单点增加+范围查询)

用于解决 范围数字和 与 单点增加 问题(复杂度O(logn))

build 方法(构造树状数组)

void build(){
	for(int i=1,v;i<=n;i++){
		cin>>v;
		add(i,v);
	}
}

lowbit方法 (获取一个二进制数最低位的1的状态)

int lowbit(int x){
	return x&(-x);
}

add方法 (单点增加)

void add(int i,int v){
	while(i<=n){
	tree[i]+=v;
	i+=lowbit(i);	
	}
}

sum方法(1~i 范围查询)

int sum(int i)//1~i范围累加和
{
	int ans=0;
	while(i>0){
		ans+=tree[i];
		i-=lowbit(i);
	}	
	return ans;
} 

range 方法(l~r范围查询)

int range(int l,int r){
	return sum(r)-sum(l-1);
}

posted @   Marinaco  阅读(2)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 一文读懂知识蒸馏
· 终于写完轮子一部分:tcp代理 了,记录一下
点击右上角即可分享
微信分享提示