Submission #646003

#TimeUsernameProblemLanguageResultExecution timeMemory
646003JJAnawatFoehn Phenomena (JOI17_foehn_phenomena)C++14
100 / 100
115 ms14664 KiB
#include<bits/stdc++.h>

using namespace std;

long long n,q,s,t;
long long ar[200005],dif[200005],fw[200005];

void upd(long long x,long long val){
    for(;x<=200000;x+=x&-x)
        fw[x]+=val;
}

long long qr(long long x){
    long long sum=0;
    for(;x>=1;x-=x&-x)
        sum+=fw[x];
    return sum;
}

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

    cin >> n >> q >> s >> t >> ar[0];
    for(long long i=1;i<=n;i++){
        cin >> ar[i];
        dif[i]=ar[i]-ar[i-1];
        if(dif[i]>0){
            upd(i,-dif[i]*s);
        }
        else{
            upd(i,-dif[i]*t);
        }
    }
    long long l,r,x;
    while(q--){
        cin >> l >> r >> x;
        if(dif[l]>0){
            if(dif[l]+x>0){
                dif[l]+=x;
                upd(l,-x*s);
            }
            else{//+ -> -
                upd(l,dif[l]*s-(dif[l]+x)*t);
                dif[l]+=x;

            }
        }
        else{//dif[l]<0
            if(dif[l]+x>0){
                upd(l,dif[l]*t-(x+dif[l])*s);
                dif[l]+=x;
                //cout << x << ' ' << dif[l] << ' ' << "hello\n";
            }
            else{
                dif[l]+=x;
                upd(l,-x*t);
            }
        }
        if(r!=n){
           r++;
        if(dif[r]>0){
            if(dif[r]-x>0){
                dif[r]-=x;
                upd(r,x*s);
            }
            else{//+ -> -
                upd(r,dif[r]*s-(dif[r]-x)*t);
                dif[r]-=x;
            }
        }
        else{//- -> +
            if(dif[r]-x>0){
                upd(r,dif[r]*t-(dif[r]-x)*s);
                dif[r]-=x;
            }
            else{//- -> -
                dif[r]-=x;
                upd(r,x*t);
            }
        }
        }

        long long ans=qr(n);
        cout << ans << '\n';
    }
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...