社区讨论

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 条回复,欢迎继续交流。

正在加载回复...