关于树状数组单点修改的一点问题
  • 板块学术版
  • 楼主Xiao_heihei
  • 当前回复5
  • 已保存回复5
  • 发布时间2023/1/6 20:40
  • 上次更新2023/10/24 05:21:31
查看原帖
关于树状数组单点修改的一点问题
766111
Xiao_heihei楼主2023/1/6 20:40

原模板题
请问在单点修改读入的部分

cin >> n >> m;
for (int i = 1, x; i <= n; i++) {
	cin >> x;
	Add(i, x);
}

Add内:

void Add(int x, int y) {//x=i,y=x;
	while (x <= n) {
		Yuan[x] += y;
		x += lowbit(x);
	}
}

读入时,为什么可以直接把参传进Add,不应该是在后面要修改时再传进去?
再者,参进了函数后会被怎么处理,蒟蒻有些分不清这里传进去和后面传进去的目的
谢谢dalao,望轻喷

#include <bits/stdc++.h>
using namespace std;
int n, m, Yuan[2000010];
int lowbit(int k) {
	return k & (-k);
}
void Add(int x, int y) {//x=i,y=x;
	while (x <= n) {
		Yuan[x] += y;
		x += lowbit(x);
	}
}
int Result(int x) {
	int ans = 0;
	while(x!=0){
		ans+=Yuan[x];
		x-=lowbit(x);
	}
	return ans;
}
int main() {
	cin >> n >> m;
	for (int i = 1, x; i <= n; i++) {
		cin >> x;
		Add(i, x);
	}
	for (int i = 0; i < m; i++) {
		int a, b, c;
		cin >> a >> b >> c;
		if (a == 1) {
			Add(b, c);
		}
		if (a == 2) {
			cout << Result(c)-Result(b-1)<<endl;
		}
	}
	return 0;
}
2023/1/6 20:40
加载中...