/ SeriousOJ /

Record Detail

Accepted


  
# Status Time Cost Memory Cost
#1 Accepted 1ms 532.0 KiB
#2 Accepted 7ms 616.0 KiB
#3 Accepted 7ms 532.0 KiB
#4 Accepted 9ms 532.0 KiB
#5 Accepted 9ms 576.0 KiB
#6 Accepted 8ms 532.0 KiB
#7 Accepted 8ms 532.0 KiB
#8 Accepted 8ms 532.0 KiB
#9 Accepted 8ms 616.0 KiB
#10 Accepted 8ms 532.0 KiB
#11 Accepted 8ms 764.0 KiB
#12 Accepted 8ms 532.0 KiB
#13 Accepted 8ms 576.0 KiB
#14 Accepted 8ms 612.0 KiB
#15 Accepted 8ms 604.0 KiB
#16 Accepted 8ms 532.0 KiB
#17 Accepted 8ms 532.0 KiB
#18 Accepted 8ms 612.0 KiB
#19 Accepted 9ms 532.0 KiB
#20 Accepted 9ms 532.0 KiB
#21 Accepted 10ms 532.0 KiB
#22 Accepted 10ms 536.0 KiB
#23 Accepted 10ms 580.0 KiB
#24 Accepted 10ms 580.0 KiB
#25 Accepted 10ms 532.0 KiB
#26 Accepted 10ms 532.0 KiB
#27 Accepted 10ms 532.0 KiB
#28 Accepted 10ms 532.0 KiB
#29 Accepted 11ms 532.0 KiB
#30 Accepted 12ms 532.0 KiB
#31 Accepted 12ms 532.0 KiB
#32 Accepted 22ms 584.0 KiB
#33 Accepted 21ms 532.0 KiB
#34 Accepted 22ms 532.0 KiB
#35 Accepted 21ms 532.0 KiB
#36 Accepted 11ms 580.0 KiB
#37 Accepted 11ms 532.0 KiB
#38 Accepted 11ms 596.0 KiB
#39 Accepted 11ms 620.0 KiB
#40 Accepted 13ms 612.0 KiB
#41 Accepted 14ms 536.0 KiB
#42 Accepted 79ms 7.824 MiB
#43 Accepted 76ms 7.77 MiB
#44 Accepted 78ms 7.816 MiB
#45 Accepted 103ms 7.781 MiB
#46 Accepted 81ms 7.906 MiB
#47 Accepted 81ms 7.82 MiB
#48 Accepted 78ms 7.953 MiB
#49 Accepted 104ms 7.938 MiB
#50 Accepted 107ms 7.809 MiB

Code

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

struct SegmentTree {
    int n;
    vector<ll> st, lazy;
    
    SegmentTree(int _n) : n(_n) {
        st.assign(4*n+4, 0);
        lazy.assign(4*n+4, 0);
    }
    
    void build(int p, int l, int r, const vector<ll>& a) {
        if (l == r) {
            st[p] = a[l];
            return;
        }
        int m = (l + r) >> 1;
        build(p<<1, l, m, a);
        build(p<<1|1, m+1, r, a);
        st[p] = max(st[p<<1], st[p<<1|1]);
    }
    
    void apply(int p, ll val) {
        st[p] += val;
        lazy[p] += val;
    }
    
    void push(int p) {
        if (lazy[p] != 0) {
            apply(p<<1, lazy[p]);
            apply(p<<1|1, lazy[p]);
            lazy[p] = 0;
        }
    }
    
    void update(int p, int l, int r, int i, int j, ll val) {
        if (i > r || j < l) return;
        if (l >= i && r <= j) {
            apply(p, val);
            return;
        }
        push(p);
        int m = (l + r) >> 1;
        update(p<<1, l, m, i, j, val);
        update(p<<1|1, m+1, r, i, j, val);
        st[p] = max(st[p<<1], st[p<<1|1]);
    }
    
    ll query(int p, int l, int r, int i, int j) {
        if (i > r || j < l) return LLONG_MIN;
        if (l >= i && r <= j) return st[p];
        push(p);
        int m = (l + r) >> 1;
        return max(query(p<<1, l, m, i, j), query(p<<1|1, m+1, r, i, j));
    }
};

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

    int T;
    cin >> T;
    while (T--) {
        int N;
        cin >> N;
        vector<ll> a(N+1);
        for (int i = 1; i <= N; i++) {
            cin >> a[i];
        }
        SegmentTree st(N);
        st.build(1, 1, N, a);
        int Q;
        cin >> Q;
        while (Q--) {
            int type, L, R;
            cin >> type >> L >> R;
            if (type == 1) {
                ll X;
                cin >> X;
                st.update(1, 1, N, L, R, X);
            } else if (type == 2) {
                ll ans = st.query(1, 1, N, L, R);
                cout << ans << '\n';
            }
        }
    }
    return 0;
}

Information

Submit By
Type
Submission
Problem
P1211 Range MAX
Language
C++17 (G++ 13.2.0)
Submit At
2025-07-10 10:27:24
Judged At
2025-07-10 10:27:24
Judged By
Score
100
Total Time
107ms
Peak Memory
7.953 MiB