社区讨论
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 条回复,欢迎继续交流。
正在加载回复...