加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

树状数组知识点

发布时间:2020-12-14 04:17:21 所属栏目:大数据 来源:网络整理
导读:1.单点加入 void add(int p,int x){for(int i=p;i=n;i+=lowbit(i)){t[i]+=x;}} 注意从编号开始,是每次+=lowbit(i)操作。另外,t[i]是+=而不是=。? ? 2.区间查询 int query(int p){int re=0;for(int i=p;i0;i-=lowbit(i)){re+=t[i];}return re;} 注意从p~1,

1.单点加入

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

 注意从编号开始,是每次+=lowbit(i)操作。另外,t[i]是+=而不是=。?

?

2.区间查询

int query(int p){
	int re=0;
	for(int i=p;i>0;i-=lowbit(i)){
		re+=t[i];
	}
	return re;
}

  注意从p~1,是每次-=lowbit(i)。

?

3.初始化

for(int i=1;i<=n;i++){
		for(int j=i-lowbit(i)+1;j<=i;j++){
			t[i]+=a[j];
		}
	}

  注意从i-lowbit(i)+1开始,j<=i;t[i]是+=。(i枚举每一个未处理的线性元素)

?

4.别忘了lowbit

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

  这里使用内联函数(inline)会更好。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读