This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include <bits/stdc++.h>
#define ll long long
using namespace std;
const int mn = 2e5+4;
const ll INF = -1e17;
ll seg[mn*4][9],lazy[mn*4];
ll f(int i, int j)
{
    if (j==0||j==6||j==7)
        return seg[i][j];
    if (j==2||j==4)
        return seg[i][j]+lazy[i];
    if (j==1||j==3)
        return seg[i][j]-lazy[i];
    if (j==8)
        return seg[i][j]+lazy[i]*2;
    return seg[i][j]-lazy[i]*2;
}
void passDown(int i)
{
    lazy[i*2+1]+=lazy[i];
    lazy[i*2+2]+=lazy[i];
    lazy[i]=0;
}
void recalc(int i)
{
    int l=(i<<1)+1,r=(i<<1)+2;
    seg[i][0]=max({f(l,0)+f(r,0),f(l,1)+f(r,4),f(l,2)+f(r,3)});
    seg[i][1]=max({f(l,1),f(r,1),f(l,0)+f(r,1),f(l,1)+f(r,7),f(l,2)+f(r,5)});
    seg[i][2]=max({f(l,2),f(r,2),f(l,0)+f(r,2),f(l,1)+f(r,8),f(l,2)+f(r,6)});
    seg[i][3]=max({f(l,3),f(r,3),f(l,3)+f(r,0),f(l,5)+f(r,4),f(l,6)+f(r,3)});
    seg[i][4]=max({f(l,4),f(r,4),f(l,4)+f(r,0),f(l,7)+f(r,4),f(l,8)+f(r,3)});
    seg[i][5]=max({f(l,5),f(r,5),f(l,3)+f(r,1),f(l,5)+f(r,7),f(l,6)+f(r,5)});
    seg[i][6]=max({f(l,6),f(r,6),f(l,3)+f(r,2),f(l,5)+f(r,8),f(l,6)+f(r,6)});
    seg[i][7]=max({f(l,7),f(r,7),f(l,4)+f(r,1),f(l,7)+f(r,7),f(l,8)+f(r,5)});
    seg[i][8]=max({f(l,8),f(r,8),f(l,4)+f(r,2),f(l,7)+f(r,8),f(l,8)+f(r,6)});
}
/**
0: |
1: |-  -1
2: |+  1
3: -|  -1
4: +|  1
5: -|- -2
6: -|+ 0
7: +|- 0
8: +|+ 2
**/
void build(int i, int l, int r)
{
    if (l==r)
    {
        cin>>seg[i][2];
        seg[i][1]=seg[i][3]=-seg[i][2];
        seg[i][4]=seg[i][2];
        for (int j=5;j<9;++j)
            seg[i][j]=INF;
        return;
    }
    build((i<<1)+1,l,(l+r)>>1);
    build((i<<1)+2,((l+r)>>1)+1,r);
    recalc(i);
}
void update(int i, int cL, int cR, int l, int r, int x)
{
    if (r<cL||cR<l)
        return;
    if (l<=cL&&cR<=r)
    {
        lazy[i]+=x;
        return;
    }
    passDown(i);
    update((i<<1)+1,cL,(cL+cR)>>1,l,r,x);
    update((i<<1)+2,((cL+cR)>>1)+1,cR,l,r,x);
    recalc(i);
}
int main()
{
    ios_base::sync_with_stdio(0); cin.tie(0);
    int n,q,l,r,x;
    cin>>n>>q;
    build(0,1,n);
    while (q--)
    {
        cin>>l>>r>>x;
        update(0,1,n,l,r,x);
        cout<<seg[0][0]<<"\n";
    }
    return 0;
}
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... |