제출 #1193728

#제출 시각아이디문제언어결과실행 시간메모리
1193728Hamed_GhaffariFoehn Phenomena (JOI17_foehn_phenomena)C++20
100 / 100
93 ms5704 KiB
#include <bits/stdc++.h>
using namespace std;

using ll = long long;

const int MXN = 2e5+5;

int n;
ll fen[MXN];
inline void updx(int l, int r, int x) {
    for(; l<=n; l+=l&-l) fen[l] += x;
    for(++r; r<=n; r+=r&-r) fen[r] -= x;
}
inline ll getx(int i) {
    ll res=0;
    for(; i>0; i-=i&-i) res += fen[i];
    return res;
}

int s, t;
inline ll contrib(int i) {
    if(i==n) return 0;
    ll a = getx(i), b = getx(i+1);
    if(a<b) return (a-b)*s;
    return (a-b)*t;
}

ll ans;

inline void upd(int l, int r, int x) {
    ans -= contrib(l-1) + contrib(r);
    updx(l, r, x);
    ans += contrib(l-1) + contrib(r);
}

int q;

int32_t main() {
    cin.tie(0); cout.tie(0); ios_base::sync_with_stdio(0);
    cin >> n >> q >> s >> t;
    for(int i=0, a; i<=n; i++) {
        cin >> a;
        if(i) upd(i, i, a);
    }
    while(q--) {
        int l, r, x;
        cin >> l >> r >> x;
        upd(l, r, x);
        cout << ans << '\n';
    }
    return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...