树状数组线性初始化不如暴力初始化()
  • 板块学术版
  • 楼主WydnksqhbD
  • 当前回复31
  • 已保存回复32
  • 发布时间2024/4/8 14:48
  • 上次更新2024/4/8 18:38:27
查看原帖
树状数组线性初始化不如暴力初始化()
1139577
WydnksqhbD楼主2024/4/8 14:48

rt

#include <stdio.h>
#include <iostream>

using namespace std;
#define N 500005

int n, m;
int c[N];

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

void update (int x, int y) {
	for (; x <= n; x += lowbit (x)) {
		c[x] += y;
	}
}

int query (int x) {
	int ans = 0;
	for (; x; x -= lowbit (x)) {
		ans += c[x];
	}
	return ans;
}

int main () {
	cin >> n >> m;
	for (int i = 1; i <= n; ++i) {
		int v;
		cin >> v;
		update (i, v);
	}
	while (m--) {
		int op, x, y;
		cin >> op >> x >> y;
		if (op == 1) {
			update (x, y);
		} else {
			cout << query (y) - query (x - 1) << endl;
		}
	}
	return 0;
}

https://www.luogu.com.cn/record/154850219

#include <stdio.h>
#include <iostream>

using namespace std;
#define N 500005

int n, m;
int a[N], b[N], c[N];

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

void init () {
	for (int i = 1; i <= n; ++i) {
		b[i] = b[i - 1] + a[i];
		c[i] = b[i] - b[i - lowbit (i)];
	}
}

void update (int x, int y) {
	for (; x <= n; x += lowbit (x)) {
		c[x] += y;
	}
}

int query (int x) {
	int ans = 0;
	for (; x; x -= lowbit (x)) {
		ans += c[x];
	}
	return ans;
}

int main () {
	cin >> n >> m;
	for (int i = 1; i <= n; ++i) {
		cin >> a[i];
	}
	init ();
	while (m--) {
		int op, x, y;
		cin >> op >> x >> y;
		if (op == 1) {
			update (x, y);
		} else {
			cout << query (y) - query (x - 1) << endl;
		}
	}
	return 0;
}

https://www.luogu.com.cn/record/154850495

2024/4/8 14:48
加载中...