/ SeriousOJ /

Record Detail

Accepted


  
# Status Time Cost Memory Cost
#1 Accepted 1ms 532.0 KiB
#2 Accepted 7ms 532.0 KiB
#3 Accepted 7ms 536.0 KiB
#4 Accepted 7ms 532.0 KiB
#5 Accepted 8ms 484.0 KiB
#6 Accepted 7ms 612.0 KiB
#7 Accepted 7ms 576.0 KiB
#8 Accepted 7ms 604.0 KiB
#9 Accepted 7ms 532.0 KiB
#10 Accepted 7ms 532.0 KiB
#11 Accepted 7ms 532.0 KiB
#12 Accepted 7ms 532.0 KiB
#13 Accepted 7ms 532.0 KiB
#14 Accepted 7ms 532.0 KiB
#15 Accepted 8ms 532.0 KiB
#16 Accepted 7ms 572.0 KiB
#17 Accepted 7ms 532.0 KiB
#18 Accepted 7ms 580.0 KiB
#19 Accepted 7ms 532.0 KiB
#20 Accepted 7ms 532.0 KiB
#21 Accepted 8ms 532.0 KiB
#22 Accepted 8ms 612.0 KiB
#23 Accepted 8ms 536.0 KiB
#24 Accepted 8ms 532.0 KiB
#25 Accepted 8ms 532.0 KiB
#26 Accepted 8ms 532.0 KiB
#27 Accepted 7ms 592.0 KiB
#28 Accepted 8ms 532.0 KiB
#29 Accepted 8ms 532.0 KiB
#30 Accepted 8ms 768.0 KiB
#31 Accepted 8ms 532.0 KiB
#32 Accepted 7ms 532.0 KiB
#33 Accepted 7ms 532.0 KiB
#34 Accepted 7ms 608.0 KiB
#35 Accepted 8ms 588.0 KiB
#36 Accepted 8ms 764.0 KiB
#37 Accepted 7ms 532.0 KiB
#38 Accepted 7ms 764.0 KiB
#39 Accepted 7ms 596.0 KiB
#40 Accepted 8ms 532.0 KiB
#41 Accepted 7ms 576.0 KiB
#42 Accepted 90ms 8.008 MiB
#43 Accepted 90ms 7.77 MiB
#44 Accepted 84ms 8.02 MiB
#45 Accepted 118ms 7.82 MiB
#46 Accepted 85ms 7.824 MiB
#47 Accepted 88ms 8.02 MiB
#48 Accepted 84ms 7.82 MiB
#49 Accepted 84ms 8.02 MiB
#50 Accepted 112ms 7.984 MiB

Code

#include <bits/stdc++.h>
using namespace std;

struct SegmentTree {
    int n;
    vector<long long> tree, lazy;

    SegmentTree(int n) : n(n) {
        tree.assign(4*n, 0);
        lazy.assign(4*n, 0);
    }

    void build(vector<long long>& arr, int node, int l, int r) {
        if (l == r) {
            tree[node] = arr[l];
            return;
        }
        int mid = (l + r) / 2;
        build(arr, 2*node, l, mid);
        build(arr, 2*node+1, mid+1, r);
        tree[node] = max(tree[2*node], tree[2*node+1]);
    }

    void pushDown(int node, int l, int r) {
        if (lazy[node] != 0) {
            tree[node] += lazy[node];
            if (l != r) {
                lazy[2*node] += lazy[node];
                lazy[2*node+1] += lazy[node];
            }
            lazy[node] = 0;
        }
    }

    void update(int node, int l, int r, int ql, int qr, long long val) {
        pushDown(node, l, r);
        if (qr < l || ql > r) return;
        if (ql <= l && r <= qr) {
            lazy[node] += val;
            pushDown(node, l, r);
            return;
        }
        int mid = (l + r) / 2;
        update(2*node, l, mid, ql, qr, val);
        update(2*node+1, mid+1, r, ql, qr, val);
        tree[node] = max(tree[2*node], tree[2*node+1]);
    }

    long long query(int node, int l, int r, int ql, int qr) {
        pushDown(node, l, r);
        if (qr < l || ql > r) return LLONG_MIN;
        if (ql <= l && r <= qr) return tree[node];
        int mid = (l + r) / 2;
        return max(query(2*node, l, mid, ql, qr),
                   query(2*node+1, mid+1, r, ql, qr));
    }
};

int main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);

    int T; cin >> T;
    while (T--) {
        int N; cin >> N;
        vector<long long> arr(N+1);
        for (int i = 1; i <= N; i++) cin >> arr[i];

        SegmentTree seg(N);
        seg.build(arr, 1, 1, N);

        int Q; cin >> Q;
        while (Q--) {
            int type; cin >> type;
            if (type == 1) {
                int L, R; long long X;
                cin >> L >> R >> X;
                seg.update(1, 1, N, L, R, X);
            } else {
                int L, R;
                cin >> L >> R;
                cout << seg.query(1, 1, N, L, R) << "\n";
            }
        }
    }
    return 0;
}

Information

Submit By
Type
Submission
Problem
P1211 Range MAX
Contest
LUCC Presents Intra LU Junior Programming Contest - Replay
Language
C++17 (G++ 13.2.0)
Submit At
2025-09-02 16:21:56
Judged At
2025-09-02 16:21:56
Judged By
Score
100
Total Time
118ms
Peak Memory
8.02 MiB