#include <bits/stdc++.h>
using namespace std;
#define int long long
#define ld long double
#define pii pair<int, int>
#define fi first
#define se second
#define __builtin_popcount __builtin_popcountll
#define all(x) (x).begin(), (x).end()
#define debug(a, l, r) for (int i = (l); i <= (r); ++i) cout << (a)[i] << ' '; cout << '\n';
struct FenwickTree{
int n; vector<int> fen;
FenwickTree() {
}
FenwickTree(int _n) : n(_n) {
fen.resize(n + 5, 0);
}
void update(int idx, int v) {
for (int i = idx; i <= n; i += i & -i)
fen[i] += v;
}
int get(int idx) {
int sum = 0;
for (int i = idx; i; i -= i & -i)
sum += fen[i];
return sum;
}
void update_range(int l, int r, int v) {
update(l, v);
update(r + 1, -v);
}
};
const int MAXN = 2e5 + 5;
int n, q, s, t, a[MAXN], temp = 0;
FenwickTree fen;
int calc(int x, int y) {
if (x > y) return (x - y) * t;
if (x < y) return (x - y) * s;
return 0;
}
void init() {
cin >> n >> q >> s >> t;
++n;
for (int i = 1; i <= n; ++i) cin >> a[i];
fen = FenwickTree(n);
for (int i = 1; i <= n; ++i) fen.update(i, a[i] - a[i - 1]);
for (int i = 1; i < n; ++i) temp += calc(a[i], a[i + 1]);
}
void solve() {
// q = 1;
while (q--) {
int l, r, x; cin >> l >> r >> x;
++l; ++r;
int old_inc = calc(fen.get(l - 1), fen.get(l));
if (r < n) old_inc += calc(fen.get(r), fen.get(r + 1));
fen.update_range(l, r, x);
int new_inc = calc(fen.get(l - 1), fen.get(l));
if (r < n) new_inc += calc(fen.get(r), fen.get(r + 1));
temp = (temp - old_inc + new_inc);
cout << temp << '\n';
}
}
signed main() {
#ifdef NCTHANH
freopen("input.txt", "r", stdin);
freopen("output.txt", "w", stdout);
#endif
ios_base::sync_with_stdio(0);
cin.tie(nullptr); cout.tie(nullptr);
init();
solve();
return 0;
}
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |