#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 time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |