/ SeriousOJ /

Record Detail

Wrong Answer


  
# Status Time Cost Memory Cost
#1 Accepted 1ms 320.0 KiB
#2 Wrong Answer 7ms 532.0 KiB
#3 Wrong Answer 7ms 532.0 KiB

Code

#include <bits/stdc++.h>     //   All praise is due to Allah alone, and peace and blessings be
using namespace std;         //         upon him, after whom there is no other Prophet.

template<class T> class Stree { private: 
    vector<T> tree, lazy; int n; T op(T a, T b) { return max(a, b); }
    void push(int node, int l, int r) {
        if (!lazy[node]) return;
        tree[node] = tree[node] + (r - l + 1) * lazy[node];
        //tree[node] = 1LL * (r - l + 1) * lazy[node];
        if (l != r) {
            int64_t left = node * 2, right = left + 1;
            lazy[left] += lazy[node];
            lazy[right] += lazy[node];
        } lazy[node] = 0;
    }
    void build(int node, int l, int r, const vector<T>& ar) {
        lazy[node] = 0;
        if (l == r) { tree[node] = ar[l - 1]; return; }
        int mid = (r + l) / 2, left = node * 2, right = left + 1;
        build(left, l, mid, ar); build(right, mid + 1, r, ar);
        tree[node] = op(tree[left], tree[right]);
    }
    void update(int node, int l, int r, int qb, int qe, T v) {
        push(node, l, r); if (l > qe || r < qb) return;
        if (l >= qb && r <= qe) {
            lazy[node] += v; push(node, l, r); return;
        }
        int mid = (r + l) / 2, left = node * 2, right = left + 1;
        update(left, l, mid, qb, qe, v);
        update(right, mid + 1, r, qb, qe, v);
        tree[node] = op(tree[left], tree[right]);
    }
    T query(int node, int l, int r, int qb, int qe) {
        push(node, l, r);
        if (l > qe || r < qb) return 0;
        if (l >= qb && r <= qe) return tree[node];
        int mid = (r + l) / 2, left = node * 2, right = left + 1;
        return op(query(left, l, mid, qb, qe), query(right, mid + 1, r, qb, qe));
    }
public: Stree(int size){ n = size, tree.resize(4 * n, 0); lazy.resize(4 * n, 0); }
    void build(const vector<T>& ar) { build(1, 1, n, ar); }
    void update(int l, int r, T v) { update(1, 1, n, l, r, v); }
    T query(int l, int r) { return query(1, 1, n, l, r); }
};

int32_t main() {
    cin.tie(0)->sync_with_stdio(false);

    int32_t Case = 1;    cin >> Case;
    for (int T = 1; T <= Case; T++) {

        int n, q; cin >> n;
        vector<int64_t> ar(n);
        for(int i = 0; i < n; i++) cin >> ar[i];
        Stree<int64_t> st(n);
        st.build(ar);
        cin >> q;

        function<void()> Test_Case = [&]() {
            while(q--) {
                int t, l, r; cin >> t >> l >> r;
                if(t == 1) {
                    int x; cin >> x;
                    st.update(l, r, x);
                }
                else {
                    cout << st.query(l, r) << '\n';
                }
            }
        };
        Test_Case();
    }
    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 15:50:17
Judged At
2025-09-02 15:50:17
Judged By
Score
2
Total Time
7ms
Peak Memory
532.0 KiB