社区讨论

WA50分求条

P1253扶苏的问题参与者 2已保存回复 1

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
1 条
当前快照
1 份
快照标识符
@mhjb0vzt
此快照首次捕获于
2025/11/03 23:38
4 个月前
此快照最后确认于
2025/11/03 23:38
4 个月前
查看原帖
WA50分求条
CPP
#include <bits/stdc++.h>
using namespace std;
#define lson l,mid,rt<<1
#define rson mid+1,r,rt<<1|1
int n, q, a[4000000], maxn[4000000], col1[4000000], col2[4000000], nowl, nowr;
void update(int rt) {
	maxn[rt] = max(maxn[rt << 1], maxn[rt << 1 | 1]);
}
void build(int l, int r, int rt) {
	col1[rt] = 0;
	col2[rt] = 1e9 + 7;
	if (l == r) {
		maxn[rt] = a[l];
		return;
	}
	int mid = (l + r) >> 1;
	build(lson);
	build(rson);
	update(rt);
}
void color(int l, int r, int rt, int type, int k) {
	if (type == 0) {
		maxn[rt] += k;
		col1[rt] += k;
		col2[rt] = 1e9 + 7;
	} else {
		maxn[rt] = k;
		col1[rt] = 0;
		col2[rt] = k;
	}
}
void push_col(int l, int r, int rt) {
	if (col1[rt] != 0) {
		int mid = (l + r) >> 1;
		color(lson, 0, col1[rt]);
		color(rson, 0, col1[rt]);
		col1[rt] = 0;
	}
	if (col2[rt] != 1e9 + 7) {
		int mid = (l + r) >> 1;
		color(lson, 1, col2[rt]);
		color(rson, 1, col2[rt]);
		col2[rt] = 1e9 + 7;
	}
}
void modify(int l, int r, int rt, int type, int k) {
	if (l >= nowl && r <= nowr) {
		color(l, r, rt, type, k);
		return;
	}
	push_col(l, r, rt);
	int mid = (l + r) >> 1;
	if (nowl <= mid) modify(lson, type, k);
	if (mid < nowr) modify(rson, type, k);
	update(rt);
}
int query(int l, int r, int rt) {
	if (l >= nowl && r <= nowr) {
		return maxn[rt];
	}
	push_col(l, r, rt);
	int mid = (l + r) >> 1, ans = 0;
	if (nowl <= mid) ans = max(ans, query(lson));
	if (mid < nowr) ans = max(ans, query(rson));
	return ans;
}
signed main() {
	ios::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);
	cin >> n >> q;
	for (int i = 1; i <= n; i++) cin >> a[i];
	build(1, n, 1);
	while (q--) {
		int op, x;
		cin >> op;
		if (op == 1) {
			cin >> nowl >> nowr >> x;
			modify(1, n, 1, 1, x);
		} else if (op == 2) {
			cin >> nowl >> nowr >> x;
			modify(1, n, 1, 0, x);
		} else {
			cin >> nowl >> nowr;
			cout << query(1, n, 1) << endl;
		}
	}
	return 0;
}

回复

1 条回复,欢迎继续交流。

正在加载回复...