/ SeriousOJ /

Record Detail

Accepted


  
# Status Time Cost Memory Cost
#1 Accepted 1ms 532.0 KiB
#2 Accepted 7ms 532.0 KiB
#3 Accepted 7ms 576.0 KiB
#4 Accepted 7ms 624.0 KiB
#5 Accepted 9ms 536.0 KiB
#6 Accepted 12ms 532.0 KiB
#7 Accepted 13ms 600.0 KiB
#8 Accepted 13ms 532.0 KiB
#9 Accepted 22ms 592.0 KiB
#10 Accepted 15ms 532.0 KiB
#11 Accepted 11ms 580.0 KiB
#12 Accepted 11ms 532.0 KiB
#13 Accepted 22ms 536.0 KiB
#14 Accepted 22ms 532.0 KiB
#15 Accepted 15ms 532.0 KiB
#16 Accepted 20ms 600.0 KiB
#17 Accepted 21ms 580.0 KiB
#18 Accepted 22ms 532.0 KiB
#19 Accepted 11ms 616.0 KiB
#20 Accepted 11ms 576.0 KiB
#21 Accepted 22ms 600.0 KiB
#22 Accepted 21ms 580.0 KiB
#23 Accepted 11ms 532.0 KiB
#24 Accepted 11ms 620.0 KiB
#25 Accepted 13ms 532.0 KiB
#26 Accepted 14ms 532.0 KiB
#27 Accepted 14ms 600.0 KiB
#28 Accepted 11ms 764.0 KiB
#29 Accepted 11ms 532.0 KiB
#30 Accepted 11ms 612.0 KiB
#31 Accepted 11ms 532.0 KiB
#32 Accepted 12ms 532.0 KiB
#33 Accepted 13ms 532.0 KiB
#34 Accepted 22ms 592.0 KiB
#35 Accepted 21ms 612.0 KiB
#36 Accepted 8ms 532.0 KiB
#37 Accepted 22ms 532.0 KiB
#38 Accepted 15ms 532.0 KiB
#39 Accepted 22ms 532.0 KiB
#40 Accepted 9ms 532.0 KiB
#41 Accepted 15ms 532.0 KiB
#42 Accepted 95ms 8.816 MiB
#43 Accepted 93ms 8.816 MiB
#44 Accepted 94ms 8.824 MiB
#45 Accepted 121ms 8.82 MiB
#46 Accepted 93ms 8.77 MiB
#47 Accepted 121ms 8.824 MiB
#48 Accepted 94ms 8.824 MiB
#49 Accepted 94ms 8.77 MiB
#50 Accepted 93ms 8.77 MiB

Code

#include<bits/stdc++.h>
using namespace std;
#define int long long
#define endl "\n"
#define ff first
#define ss second
#define pb push_back
#define all(a) a.begin(),a.end()
#define rall(a) a.rbegin(),a.rend()
#define pii pair<int,int>
#define Fast ios_base::sync_with_stdio(false);cin.tie(NULL);cout.tie(NULL);
const int MOD = 1000000007;
const int INF = 1e18;
const int N = 2e5;
class SegmentTree
{
public:
    int n;
    vector<int>a, lazy, tree;
    SegmentTree(vector<int>arr) {
        a = arr;
        n = arr.size();
        lazy.assign(4 * n, 0);
        tree.assign(4 * n, 0);
        build(1, 0, n - 1);
    }
    void update(int l, int r, int val) {update(1, 0, n - 1, l, r, val);}
    int query(int l, int r) {return query(1, 0, n - 1, l, r);}
    void print() {for (auto it : tree)cout << it << endl;}
private:
    void propagate(int node, int start, int end) {
        if (start == end)tree[node] += lazy[node];
        else {
            tree[node] += lazy[node]; /*if you need sum use it else for other
                                                      things remove (end-start+1) part*/
            lazy[2 * node] += lazy[node];
            lazy[2 * node + 1] += lazy[node];
        }
        lazy[node] = 0;
    }
    void build(int node, int start, int end) {
        if (start == end)tree[node] = a[start];
        else {
            int mid = (start + end) / 2;
            build(2 * node, start, mid);
            build(2 * node + 1, mid + 1, end);
            tree[node] = max(tree[2 * node] , tree[2 * node + 1]);
        }
    }
    void update(int node, int start, int end, int l, int r, int val) {
        propagate(node, start, end);
        if (end<l or start>r)return;
        if (start == end)tree[node] += val;
        else if (l <= start and end <= r) {
            lazy[node] += val;
            propagate(node, start, end);
        }
        else {
            int mid = (start + end) / 2;
            update(2 * node, start, mid, l, r, val);
            update(2 * node + 1, mid + 1, end, l, r, val);
            tree[node] = max(tree[2 * node] , tree[2 * node + 1]);

        }
    }
    int query(int node, int start, int end, int l, int r) {
        if (end<l or start>r)return -INF;
        propagate(node, start, end);
        if (start == end) {
            return tree[node];
        }
        else if (l <= start and end <= r)return tree[node];
        else {
            int mid = (start + end) / 2;
            int left = query(2 * node, start, mid, l, r);
            int right = query(2 * node + 1, mid + 1, end, l, r);
            return max(left , right);
        }
    }
};
void solve(int tc) {
    int n; cin >> n;
    vector<int>v(n + 1);
    for (int i = 1; i <= n; i++) cin >> v[i];
    SegmentTree seg(v);
    int q; cin >> q;
    while (q--) {
        int t; cin >> t;
        if (t == 1) {
            int l, r, x; cin >> l >> r >> x;
            seg.update(l, r, x);
        }
        else {
            int l, r; cin >> l >> r;
            cout << seg.query(l, r) << endl;
        }
    }
}
int32_t main() {
    Fast
    int t = 1;
    cin >> t;
    for (int tc = 1; tc <= t; tc++)
        solve(tc);
    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 17:01:26
Judged At
2025-09-02 17:01:26
Judged By
Score
100
Total Time
121ms
Peak Memory
8.824 MiB