Submission #655724

#TimeUsernameProblemLanguageResultExecution timeMemory
655724benjaminkleynFoehn Phenomena (JOI17_foehn_phenomena)C++17
30 / 100
293 ms15100 KiB
#include <bits/stdc++.h> using namespace std; typedef long long ll; int N, Q; ll S, T, A[200001]; ll t[1000000]; void build(int v, int tl, int tr) { if (tl == tr) { t[v] = A[tl]; return; } int tm = (tl + tr) / 2; build(v * 2, tl, tm); build(v * 2 + 1, tm + 1, tr); t[v] = 0; } void add(int v, int tl, int tr, int l, int r, ll val) { if (r < tl || tr < l) return; if (l <= tl && tr <= r) { t[v] += val; return; } int tm = (tl + tr) / 2; add(v * 2, tl, tm, l, r, val); add(v * 2 + 1, tm + 1, tr, l, r, val); } ll query(int v, int tl, int tr, int idx) { if (tl == tr) return t[v]; int tm = (tl + tr) / 2; if (idx <= tm) return t[v] + query(v * 2, tl, tm, idx); else return t[v] + query(v * 2 + 1, tm + 1, tr, idx); } int main() { ios_base::sync_with_stdio(false); cin.tie(NULL); cin >> N >> Q >> S >> T; for (int i = 0; i <= N; i++) cin >> A[i]; build(1, 0, N); ll res = 0; for (int i = 0; i < N; i++) res += max(0LL, A[i] - A[i + 1]) * T - max(0LL, A[i + 1] - A[i]) * S; int L, R; ll x; while (Q--) { cin >> L >> R >> x; A[L - 1] = query(1, 0, N, L - 1); A[R + 1] = query(1, 0, N, R + 1); A[L] = query(1, 0, N, L); A[R] = query(1, 0, N, R); A[N+1] = A[N]; res -= T * max(0LL, A[L - 1] - A[L]) - S * max(0LL, A[L] - A[L - 1]); res -= T * max(0LL, A[R] - A[R + 1]) - S * max(0LL, A[R + 1] - A[R]); add(1, 0, N, L, R, x); A[L] = query(1, 0, N, L); A[R] = query(1, 0, N, R); A[N+1] = A[N]; res += T * max(0LL, A[L - 1] - A[L]) - S * max(0LL, A[L] - A[L - 1]); res += T * max(0LL, A[R] - A[R + 1]) - S * max(0LL, A[R + 1] - A[R]); cout << res << '\n'; } return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...