This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int MAXN = (1 << 18);
ll tree[2 * MAXN], lazy[2 * MAXN];
void init() {
    for (int i = 0; i < 2 * MAXN; i ++)
        tree[i] = lazy[i] = 0;
}
void pushdown(int index) {
    if (lazy[index] != 0) {
        if (index < MAXN) {
            lazy[2 * index] += lazy[index];
            lazy[2 * index + 1] += lazy[index];
            tree[index] = tree[2 * index] + tree[2 * index + 1] + lazy[index];
        } else {
            tree[index] += lazy[index];
        }
        lazy[index] = 0;
    }
}
void upd(int left, int right, int index, int maxl, int maxr, ll value) {
    if (left == maxl && right == maxr) {
        lazy[index] += value; return;
    }
    pushdown(index);
    int mid = (maxl + maxr) / 2;
    if (left <= mid)
        upd(left, min(mid, right), 2 * index, maxl, mid, value);
    if (right > mid)
        upd(max(mid + 1, left), right, 2 * index + 1, mid + 1, maxr, value);
}
ll query(int x, int index, int maxl, int maxr) {
    pushdown(index);
    if (x == maxl && x == maxr) {
        return tree[index];
    }
    int mid = (maxl + maxr) / 2;
    if (x <= mid)
        return query(x, 2 * index, maxl, mid);
    else
        return query(x, 2 * index + 1, mid + 1, maxr);
}
ll get(int x) {return query(x, 1, 0, MAXN - 1);}
ll s, t;
ll calc(ll a, ll b) {
    if (a < b)
        return (-s) * (b - a);
    else
        return t * (a - b);
}
int main() {
    init();
    int n, q;
    cin >> n >> q >> s >> t;
    ll curval = 0;
    ll last = 0;
    for (int i = 0; i <= n; i ++) {
        ll xx; cin >> xx;
        upd(i, i, 1, 0, MAXN - 1, xx);
        curval += calc(last, xx);
        last = xx;
    }
    for (int i = 0; i < q; i ++) {
        int l, r; cin >> l >> r;
        ll dx; cin >> dx;
        curval -= calc(get(l - 1), get(l));
        if (r != n)
            curval -= calc(get(r), get(r + 1));
        upd(l, r, 1, 0, MAXN - 1, dx);
        curval += calc(get(l - 1), get(l));
        if (r != n)
            curval += calc(get(r), get(r + 1));
        cout << curval << endl;
    }
}
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... |