线段树 WA50 求调
查看原帖
线段树 WA50 求调
726139
残阳如血楼主2024/5/4 11:37
#include <iostream>
typedef long long lint;
const int N = 1e6 + 10;
const lint INF = -1e18;

int n, q, a[N];
lint w[4 * N], lzy_set[4 * N], lzy_add[4 * N];

bool inRange(int l, int r, int L, int R) {
	return l >= L && r <= R;
}

bool outRange(int l, int r, int L, int R) {
	return l > R || r < L;
}

void maketag(int u, int x, int type) { // 1:设置  0:加上
	if (type) lzy_add[u] = 0, lzy_set[u] = w[u] = x;
	else {
		if (lzy_set[u] == INF) lzy_add[u] += x;
		else lzy_set[u] += x;
		w[u] += x;
	}
}

void pushup(int u) {
	w[u] = std::max(w[u * 2], w[u * 2 + 1]);
}

void pushdown(int u) {
	if (lzy_set[u] == INF) { // 加上
		maketag(u * 2, lzy_add[u], 0);
		maketag(u * 2 + 1, lzy_add[u], 0);
		lzy_add[u] = 0;
	} else { // 设置
		maketag(u * 2, lzy_set[u], 1);
		maketag(u * 2 + 1, lzy_set[u], 1);
		lzy_set[u] = INF;
	}
}

void build(int u, int l, int r) {
	lzy_set[u] = INF; // 赋值为一个不可能出现的数值
	if (l == r) {
		w[u] = a[l];
		return ;
	}
	int mid = l + r >> 1;
	build(u * 2, l, mid);
	build(u * 2 + 1, mid + 1, r);
	pushup(u);
}

lint query(int u, int l, int r, int L, int R) { // 查询
	if (outRange(l, r, L, R)) return INF;
	if (inRange(l, r, L, R)) return w[u];
	int mid = l + r >> 1;
	pushdown(u);
	return std::max(query(u * 2, l, mid, L, R), query(u * 2 + 1, mid + 1 , r, L, R));
}

void update(int u, int l, int r, int L, int R, int x, int type) { // 更新
	if (outRange(l, r, L, R)) return ;
	if (inRange(l, r, L, R)) { maketag(u, x, type); return ; }
	int mid = l + r >> 1;
	pushdown(u);
	update(u * 2, l, mid, L, R, x, type);
	update(u * 2 + 1, mid + 1, r, L, R, x, type);
	pushup(u);
}

int main() {
	std::cin.tie(0)->sync_with_stdio(0);
	std::cin >> n >> q;
	for (int i = 1; i <= n; ++i) std::cin >> a[i];
	build(1, 1, n);
	for (int op, l, r, x; q; --q) {
		std::cin >> op >> l >> r;
		if (op == 1) std::cin >> x, update(1, 1, n, l, r, x, 1);
		else if (op == 2) std::cin >> x, update(1, 1, n, l, r, x, 0);
		else std::cout << query(1, 1, n, l, r) << '\n';
	}
	std::cout.flush();
	return 0;
}
2024/5/4 11:37
加载中...