제출 #1310358

#제출 시각아이디문제언어결과실행 시간메모리
1310358LeonaRagingFoehn Phenomena (JOI17_foehn_phenomena)C++20
100 / 100
92 ms7408 KiB
#include <bits/stdc++.h> using namespace std; #define int long long #define db(val) "[" #val " = " << (val) << "] " const int maxn = 2e5 + 4; const int mod = 1e9 + 7; int n, q, s, t, a[maxn], bit[maxn]; void updatePoint(int u, int v) { int idx = u; while (idx <= n) { bit[idx] += v; idx += (idx & (-idx)); } } void updateRange(int l, int r, int v) { updatePoint(l, v); updatePoint(r + 1, -v); } int get(int u) { if (u == 0) return a[0]; if (u == n + 1) u = n; int idx = u, ans = 0; while (idx > 0) { ans += bit[idx]; idx -= (idx & (-idx)); } return ans; } signed main() { ios::sync_with_stdio(0); cin.tie(0); cout.tie(0); // freopen("inputf.in", "r", stdin); cin >> n >> q >> s >> t; int sum = 0; for (int i = 0; i <= n; i++) { cin >> a[i]; if (i > 0) { updateRange(i, i, a[i]); int dif = a[i] - a[i - 1]; sum -= dif * (dif > 0 ? s : t); } } while (q--) { int l, r, k; cin >> l >> r >> k; int dif; dif = get(l) - get(l - 1); sum += dif * (dif > 0 ? s : t); dif = get(r + 1) - get(r); // clog << db(r) << db(r + 1) << dif << '\n'; sum += dif * (dif > 0 ? s : t); updateRange(l, r, k); dif = get(l) - get(l - 1); sum -= dif * (dif > 0 ? s : t); dif = get(r + 1) - get(r); sum -= dif * (dif > 0 ? s : t); cout << sum << '\n'; } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...