我的线段树模板哪里错了
  • 板块学术版
  • 楼主封禁用户
  • 当前回复1
  • 已保存回复1
  • 发布时间2021/7/19 07:31
  • 上次更新2023/11/4 14:14:11
查看原帖
我的线段树模板哪里错了
461366
封禁用户楼主2021/7/19 07:31
const int N = 1005;
int n, a[N], tree[N * 4], lzy[N * 4];

void push_up(int rt) {
	tree[rt] = tree[rt * 2] + tree[rt * 2 + 1];
}

void push_down(int rt) {
	if (lzy[rt]) {
		lzy[rt * 2] += lzy[rt];
		lzy[rt * 2 + 1] += lzy[rt];
		a[rt * 2] += lzy[rt];
		a[rt * 2 + 1] += lzy[rt];
		lzy[rt] = 0;
	}
}

void build(int rt, int l, int r) {
	if (l == r) tree[rt] = a[l];
	else {
		int m = (l + r) / 2;
		build(rt * 2, l, m);
		build(rt * 2 + 1, m + 1, r);
		push_up(rt);
	}
}

void update(int L, int R, int v, int l, int r, int k) {
	if (L <= l && r <= R) {
		lzy[k] += v;
		a[k] += v;
	} else {
		push_down(k);
		int m = (l + r) / 2;
		if (L <= m) update(L, R, v, l, m, k * 2);
		if (R > m) update(L, R, v, m + 1, r, k * 2 + 1);
		push_up(k);
	}
}

int query(int L, int R, int l, int r, int k) {
	if (L <= l && r <= R) return a[k];
	else {
		push_down(k);
		int m = (l + r) / 2, ans = 0;
		if (L <= m) ans += query(L, R, l, m, k * 2);
		if (R > m) ans += query(L, R, m + 1, r, k * 2 + 1);
		return ans;
	}
}

我的线段树模板有误,大佬帮忙康康吧

2021/7/19 07:31
加载中...