社区讨论
9ptsRE本地能过求调
P4513小白逛公园参与者 1已保存回复 0
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 0 条
- 当前快照
- 1 份
- 快照标识符
- @m3bkgipm
- 此快照首次捕获于
- 2024/11/10 20:24 去年
- 此快照最后确认于
- 2024/11/10 20:58 去年
第二个样例下下来是能过的,没有出现RE情况,但交上去就炸
CPP#include <bits/stdc++.h>
using namespace std;
#define ls u << 1
#define rs u << 1 | 1
const int maxn = 5e5 + 5;
struct line {
int l, r, sum, lmax, rmax, ans;
} t[maxn << 2];
int val[maxn];
line push_up(line l, line r) {
line res;
res.sum = l.sum + r.sum;
res.lmax = max(l.lmax, l.sum + r.lmax);
res.rmax = max(r.rmax, r.sum + l.rmax);
res.ans = max({l.ans, r.ans, l.rmax + r.lmax});
res.l = l.l;
res.r = r.r;
return res;
}
void build(int u, int l, int r) {
if (l == r) {
t[u].l = l;
t[u].r = r;
t[u].ans = t[u].sum = t[u].lmax = t[u].rmax = val[l];
return;
}
int mid = (l + r) >> 1;
build(ls, l, mid);
build(rs, mid + 1, r);
t[u] = push_up(t[ls], t[rs]);
}
void modify(int u, int x, int v) {
if (t[u].l == x && x == t[u].r) {
t[u].ans = t[u].sum = t[u].lmax = t[u].rmax = v;
return;
}
int mid = (t[u].l + t[u].r) >> 1;
if (x <= mid) {
modify(ls, x, v);
} else {
modify(rs, x, v);
}
t[u] = push_up(t[ls], t[rs]);
}
line query(int u, int l, int r) {
if (l <= t[u].l && r >= t[u].r) {
return t[u];
}
int mid = (t[u].l + t[u].r) >> 1;
if (l > mid) {
return query(rs, l, r);
}
if (r <= mid) {
return query(ls, l, r);
}
return push_up(query(ls, l, r), query(rs, l, r));
}
void best_coder() {
int n, m;
cin >> n >> m;
for (int i = 1; i <= n; ++i) {
cin >> val[i];
}
build(1, 1, n);
for (int i = 1; i <= m; ++i) {
int opt, l, r;
cin >> opt >> l >> r;
if (opt == 1) {
if (l > r) {
swap(l, r);
}
cout << query(1, l, r).ans << "\n";
} else {
modify(1, l, r);
}
}
}
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
cout.tie(nullptr);
best_coder();
return 0;
}
回复
共 0 条回复,欢迎继续交流。
正在加载回复...