제출 #1180041

#제출 시각아이디문제언어결과실행 시간메모리
1180041niepamietamhaslaFoehn Phenomena (JOI17_foehn_phenomena)C++20
0 / 100
56 ms4420 KiB
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;

const int MAXN = 2e5 + 5;

ll s, t;
ll diff[MAXN];
ll w = 0;

int main(){
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
    int n, q;
    cin >> n >> q;
    cin >> s >> t;
    t = -t;
    ll a, b, c;
    ll prev = 0;
    for(int i = 0; i <= n; ++i){
        cin >> a;
        diff[i] = a - prev;
        prev = a;
        if(diff[i] <= 0){
            w += t * diff[i];
        }
        else{
            w -= s * diff[i];
        }
        //cout << i << " " << diff[i] << " d\n";
    }
    //cout << w << " w\n";
    for(int i = 0; i < q; ++i){
        cin >> a >> b >> c;
        if(c > 0){
            if(diff[a] <= 0 and diff[a] + c > 0){
                w -= t * diff[a];
                diff[a] += c;
                w -= s * diff[a];
            }
            else if(diff[a] <= 0){
                w -= t * c;
                diff[a] += c;
            }
            else{
                w -= s * c;
                diff[a] += c;
            }
            
            if(b == n){
                cout << w << "\n";
                continue;
            }
            if(diff[b + 1]  > 0 and diff[b + 1] - c <= 0){
                w += s * diff[b + 1];
                diff[b + 1] -= c;
                w += t * diff[b + 1];
            }
            else if(diff[b + 1] > 0){
                w += s * c;
                diff[b + 1] -= c;
            }
            else{
                w += t * c;
                diff[b + 1] -= c;
            }
        }
        else{
            if(diff[a] > 0 and diff[a] + c <= 0){
                w += s * diff[a];
                diff[a] += c;
                w += t * diff[a];
            }
            else if(diff[a] > 0){
                w -= s * c;
                diff[a] += c;
            }
            else{
                w += t * c;
                diff[a] += c;
            }

            if(b == n){
                cout << w << "\n";
                continue;
            }
            if(diff[b + 1] <= 0 and diff[b + 1] - c > 0){
                w -= t * diff[b + 1];
                diff[b + 1] -= c;
                w -= s * diff[b + 1];
            }
            else if(diff[b + 1] <= 0){
                w -= t * c;
                diff[b + 1] -= c;
            }
            else{
                w += s * c;
                diff[b + 1] -= c;
            }
        }

        
        cout << w << "\n";
        // for(int j = 1; j <= n; ++j){
        //     cout << diff[j] << " d\n";
        // }
        // cout << "\n";
    }
    

    return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...