Submission #1199442

#TimeUsernameProblemLanguageResultExecution timeMemory
1199442hyl_backupFoehn Phenomena (JOI17_foehn_phenomena)C++20
100 / 100
60 ms7240 KiB
//Foehn Phenomena
#include <iostream>

#define MIN(a, b) ((a<b)? a :b )
#define MAX(a, b) ((a>b)? a :b )

long long n, q, s, t, l, r, x, sum;

long long arr[200007];
long long dif[200007];

int main(){
    std::cin.tie(0);
    std::ios_base::sync_with_stdio(0);

    std::cin >> n >> q >> s >> t;

    sum = 0;

    for(int i = 0; i<=n; ++i){
        std::cin >> arr[i];
        if(i){
            dif[i]=arr[i]-arr[i-1];
            //std::cout << dif[i] << ' ';
            if(dif[i]>0){
                sum+=-s*dif[i];
            }
            else{
                sum+=-t*dif[i];
            }
            //std::cout << '|'<<sum <<'|';
        }
    }

    //std::cout << "bas: "<< sum << '\n';


    for(int i = 0; i<q; ++i){
        std::cin >> l >> r >> x;

        if(dif[l]>0){
            sum-=-s*dif[l];
        }
        else{
            sum-=-t*dif[l];
        }
        if(r+1<=n){
            if(dif[r+1]>0){
                sum-=-s*dif[r+1];
            }
            else{
                sum-=-t*dif[r+1];
            }
        }

        dif[l]+=x;
        dif[r+1]-=x;

        if(dif[l]>0){
            sum+=-s*dif[l];
        }
        else{
            sum+=-t*dif[l];
        }

        if(r+1<=n){
            if(dif[r+1]>0){
                sum+=-s*dif[r+1];
            }
            else{
                sum+=-t*dif[r+1];
            }
        }


        std::cout << sum << '\n';
    }

    return 0;
}

#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...