Submission #1109300

#TimeUsernameProblemLanguageResultExecution timeMemory
1109300mariaclaraFoehn Phenomena (JOI17_foehn_phenomena)C++17
100 / 100
280 ms24924 KiB
#include<bits/stdc++.h> using namespace std; typedef long long ll; typedef tuple<ll,ll,ll> trio; typedef pair<int,int> pii; const int MAXN = 2e5+5; const ll INF = 1e9; #define all(x) x.begin(), x.end() #define sz(x) (int)x.size() #define mk make_pair #define pb push_back #define fr first #define sc second int n, q, s, t, a[MAXN]; ll ans, seg[4*MAXN], lazy[4*MAXN], dif[MAXN]; void build(int node, int l, int r) { if(l == r) { seg[node] = a[l]; return; } int mid = (l+r)/2; build(2*node, l, mid); build(2*node+1, mid+1, r); } void prop(int node, int flag) { seg[node] += lazy[node]; if(!flag) { lazy[2*node] += lazy[node]; lazy[2*node+1] += lazy[node]; } lazy[node] = 0; } void update(int node, int l, int r, int p, int q, int x) { prop(node, l==r); if(r < p or q < l) return; if(p <= l and r <= q) { lazy[node] = x; prop(node, l==r); return; } int mid = (l+r)/2; update(2*node, l, mid, p, q, x); update(2*node+1, mid+1, r, p, q, x); } ll query(int node, int l, int r, int ind) { prop(node, l == r); if(ind == 0) return 0; if(l == r) return seg[node]; int mid = (l+r)/2; if(ind <= mid) return query(2*node, l, mid, ind); else return query(2*node+1, mid+1, r, ind); } int main() { ios_base::sync_with_stdio(0); cin.tie(0); cin >> n >> q >> s >> t; for(int i = 0; i <= n; i++) { cin >> a[i]; if(i == 0) continue; if(a[i] > a[i-1]) dif[i] = (ll)(a[i-1] - a[i]) * s; else dif[i] = (ll)(a[i-1] - a[i]) * t; ans += dif[i]; } build(1, 1, n); while(q--) { int L, R, X; cin >> L >> R >> X; update(1, 1, n, L, R, X); ans -= dif[L]; dif[L] = query(1, 1, n, L-1) - query(1, 1, n, L); if(dif[L] < 0) dif[L] *= s; else dif[L] *= t; ans += dif[L]; ans -= dif[R+1]; dif[R+1] = query(1, 1, n, R) - query(1, 1, n, min(R+1, n)); if(dif[R+1] < 0) dif[R+1] *= s; else dif[R+1] *= t; ans += dif[R+1]; cout << ans << "\n"; } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...