/ SeriousOJ /

Record Detail

Accepted


  
# Status Time Cost Memory Cost
#1 Accepted 1ms 532.0 KiB
#2 Accepted 6ms 532.0 KiB
#3 Accepted 6ms 532.0 KiB
#4 Accepted 6ms 532.0 KiB
#5 Accepted 6ms 580.0 KiB
#6 Accepted 6ms 532.0 KiB
#7 Accepted 6ms 532.0 KiB
#8 Accepted 6ms 532.0 KiB
#9 Accepted 18ms 576.0 KiB
#10 Accepted 6ms 580.0 KiB
#11 Accepted 6ms 532.0 KiB
#12 Accepted 6ms 532.0 KiB
#13 Accepted 6ms 532.0 KiB
#14 Accepted 6ms 764.0 KiB
#15 Accepted 6ms 532.0 KiB
#16 Accepted 6ms 532.0 KiB
#17 Accepted 6ms 532.0 KiB
#18 Accepted 6ms 632.0 KiB
#19 Accepted 6ms 580.0 KiB
#20 Accepted 6ms 532.0 KiB
#21 Accepted 6ms 532.0 KiB
#22 Accepted 6ms 532.0 KiB
#23 Accepted 6ms 532.0 KiB
#24 Accepted 7ms 532.0 KiB
#25 Accepted 7ms 532.0 KiB
#26 Accepted 7ms 532.0 KiB
#27 Accepted 8ms 532.0 KiB
#28 Accepted 9ms 532.0 KiB
#29 Accepted 13ms 580.0 KiB
#30 Accepted 13ms 580.0 KiB
#31 Accepted 18ms 620.0 KiB
#32 Accepted 8ms 532.0 KiB
#33 Accepted 10ms 532.0 KiB
#34 Accepted 11ms 532.0 KiB
#35 Accepted 11ms 576.0 KiB
#36 Accepted 11ms 580.0 KiB
#37 Accepted 11ms 608.0 KiB
#38 Accepted 11ms 532.0 KiB
#39 Accepted 18ms 580.0 KiB
#40 Accepted 8ms 532.0 KiB
#41 Accepted 10ms 532.0 KiB
#42 Accepted 95ms 2.688 MiB
#43 Accepted 122ms 2.52 MiB
#44 Accepted 120ms 2.52 MiB
#45 Accepted 95ms 2.434 MiB
#46 Accepted 114ms 2.531 MiB
#47 Accepted 99ms 2.637 MiB
#48 Accepted 95ms 2.625 MiB
#49 Accepted 98ms 2.621 MiB
#50 Accepted 94ms 2.602 MiB

Code

/*
 *   Copyright (c) 2025 Emon Thakur
 *   All rights reserved.
 */
#include<bits/stdc++.h>
using namespace std;
#define ll long long
// #define cout file

ll a[100005],add[400],mx[400],blocksize,n,block[100005];

void update(int l,int r,ll x)
{
    int blockl = block[l];
    int blockr = block[r];
    if(blockl == blockr)
    {
        for(int i=l;i<=r;i++) a[i] += x;
        ll mxb = -1e18;
        for(int i=(blocksize*(blockl-1))+1;i<=min(n,blocksize*blockl);i++) a[i]+= add[blockl] , mxb = max(mxb , a[i]);
        mx[blockl] = mxb;
        add[blockl] = 0;
        return;
    }
    if(l%blocksize != 1)
    {
        int last = min(n,blocksize*blockl);
        for(int i=l;i<=last;i++) a[i] += x;
        ll mxb = -1e18;
        for(int i=(blocksize*(blockl-1))+1;i<=last;i++) a[i] += add[blockl], mxb = max(mxb , a[i]);
        mx[blockl] = mxb;
        add[blockl] = 0;
        blockl++;
    }
    if(r%blocksize)
    {
        int first = blocksize*(blockr-1)+1;
        for(int i=r;i>=first;i--) a[i] += x;
        ll mxb = -1e18;
        for(int i=min(n,blocksize*blockr);i>=first;i--) a[i] += add[blockr] , mxb = max(mxb , a[i]);
        mx[blockr] = mxb;
        add[blockr] = 0;
        --blockr;
    }
    for(int i=blockl;i<=blockr;i++) add[i] += x;
}

ll query(int l,int r)
{
    ll ans = -1e18;
    int blockl = block[l];
    int blockr = block[r];
    if(blockl == blockr)
    {
        for(int i=l;i<=r;i++) ans = max(ans , a[i] + add[blockl]);
        return ans;
    }
    if(l%blocksize != 1)
    {
        int last = min(n,blocksize*blockl);
        for(int i=l;i<=last;i++) ans = max(ans , a[i] + add[blockl]);
        blockl++;
    }
    if(r%blocksize)
    {
        int first = blocksize*(blockr-1)+1;
        for(int i=r;i>=first;i--) ans = max(ans , a[i] + add[blockr]);
        --blockr;
    }
    for(int i=blockl;i<=blockr;i++) ans = max(ans , mx[i] + add[i]);
    return ans;
}


void solve(int tc)
{
    // string outp = "output"+to_string(tc)+".txt";
    // string inp = "input"+to_string(tc)+".txt";
    // ofstream file(outp);
    // freopen(inp.c_str(),"r",stdin);

    int t; cin >> t; while(t--)
    {
        cin >> n;
        blocksize = sqrt(n);
        for(int i=1;i<=n;i++) cin >> a[i], block[i]=(i+blocksize-1)/blocksize;
        for(int i=1;i<400;i++) add[i]=0, mx[i] = -1e18;

        for(int i=1;i<=n;i+=blocksize)
        {
            ll mxv = a[i];
            for(int j=i;j<=min(n,i+blocksize-1);j++)
            {
                mxv = max(mxv , a[j]);
            }
            mx[block[i]] = mxv;
        }


        ll q,type,l,r,x; cin >> q; 
        while(q--)
        {
            cin >> type;
            if(type==1)
            {
                cin >> l >> r >> x;
                update(l,r,x);
            }
            else
            {
                cin >> l >> r;
                cout<<query(l,r)<<'\n';
            }
        }
    }
}


int32_t main()
{
    ios::sync_with_stdio(false); cin.tie(nullptr);
    solve(0);
    //for(int tc=0;tc<50;tc++) solve(tc);
}

Information

Submit By
Type
Submission
Problem
P1211 Range MAX
Language
C++17 (G++ 13.2.0)
Submit At
2025-07-10 09:13:08
Judged At
2025-07-10 09:13:08
Judged By
Score
100
Total Time
122ms
Peak Memory
2.688 MiB