Submission #1121065

#TimeUsernameProblemLanguageResultExecution timeMemory
1121065staszic_ojuzFoehn Phenomena (JOI17_foehn_phenomena)C++17
0 / 100
404 ms12172 KiB
#include <bits/stdc++.h>
using namespace std;

int main(){
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
    int n, q, s, t;
    cin >> n >> q >> s >> t;
    vector<int64_t> amplitudes;
    int64_t temps[n + 1] = {0};
    int l, r, x, a = 0;
    cin >> x;
    a = x;
    amplitudes.push_back(x);
    for(int i = 1; i <= n; i++){
        cin >> x;
        amplitudes.push_back(x - a);
        a = x;
    }
    temps[0] = 0;
    for(int i = 1; i <= n; i++){
        if(amplitudes[i] < 0){
            temps[i] = temps[i - 1] - t * amplitudes[i];
        }else{
            temps[i] = temps[i - 1] - s * amplitudes[i];
        }
    }
    for(int k = 0; k < q; k++){
        cin >> l >> r >> x;
        if(x > 0){
            if(amplitudes[l] >= 0){
                temps[n] -= x * s;
            }else if(amplitudes[l] > -x){
                temps[n] -= (-amplitudes[l] * t + (x + amplitudes[l]) * s);
            }else{
                temps[n] -= x * t;
            }
            if(r < n){
                if(amplitudes[r + 1] <= 0){
                    temps[n] += x * t;
                }else if(amplitudes[r + 1] < x){
                    temps[n] += amplitudes[r + 1] * s + (x - amplitudes[r + 1]) * t;
                }else{
                    temps[n] += x * s;
                }
            }
        }else{
            if(amplitudes[l] <= 0){
                temps[n] -= x * t;
            }else if(amplitudes[l] <= -x){
                temps[n] += (amplitudes[l] * s + (-x - amplitudes[l]) * t);
            }else{
                temps[n] -= x * s;
            }
            if(r < n){
                if(amplitudes[r + 1] >= 0){
                    temps[n] += x * s;
                }else if(amplitudes[r + 1] > x){
                    temps[n] -= -amplitudes[r + 1] * t - (x - amplitudes[r + 1]) * s;
                }else{
                    temps[n] += x * t;
                }
            }
        }

        amplitudes[l] += x;
        amplitudes[r + 1] -= x;
        cout << temps[n] << endl;
    }
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...