Submission #1297760

#TimeUsernameProblemLanguageResultExecution timeMemory
1297760miyamae_nonoaFoehn Phenomena (JOI17_foehn_phenomena)C++20
100 / 100
444 ms11360 KiB
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
const int maxn = 2e5 + 5;
int n, q;
ll s, t;
ll a[maxn], diff[maxn];
ll seg[4*maxn];
ll windUpd(ll x) {
    if (x > 0) return -s * x;
    else return t * (-x);
}
void build(int id, int l, int r) {
    if (l == r) {
        seg[id] = windUpd(diff[l]);
        return;
    }
    int mid = (l+r)/2;
    build(2 * id, l, mid);
    build(2 * id + 1, mid + 1, r);
    seg[id] = seg[2 * id] + seg[2 * id + 1];
}
void update(int id, int l, int r, int pos, ll val) {
    if (l == r) {
        diff[pos] += val;
        seg[id] = windUpd(diff[pos]);
        return;
    }
    int mid = (l + r) / 2;
    if (pos <= mid) update(2 * id, l, mid, pos, val);
    else update(2 * id + 1, mid + 1, r, pos, val);
    seg[id] = seg[2 * id] + seg[2 * id + 1];
}
ll query() {
    return seg[1];
}
int main() {
    cin >> n >> q >> s >> t;
    for (int i=0;i<=n;i++) cin >> a[i];
    for (int i=1;i<=n;i++) diff[i] = a[i] - a[i-1];
    build(1, 1, n);
    while(q--) {
        int l,r; ll x;
        cin >> l >> r >> x;
        update(1, 1, n, l, x);
        if (r < n) update(1, 1, n, r+1, -x);
        cout << query() << "\n";
    }
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...