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...