Submission #209096

#TimeUsernameProblemLanguageResultExecution timeMemory
209096SiberianFoehn Phenomena (JOI17_foehn_phenomena)C++17
100 / 100
216 ms9580 KiB
#include <bits/stdc++.h> using namespace std; using ll = long long; using ld = long double; using ull = unsigned long long; #define all(x) x.begin(), x.end() template <typename T1, typename T2> inline void chkmin(T1 &x, const T2 & y) {if (x > y) x = y;} template <typename T1, typename T2> inline void chkmax(T1 &x, const T2 & y) {if (x < y) x = y;} #define int ll int n, q, s, t; vector<int> a; void read() { cin >> n >> q >> s >> t; n++; a.resize(n); for (auto &i : a) cin >> i; } struct fenvik{ vector<int> tree; int n; fenvik() {} fenvik(int sz) { n = sz; tree.assign(n, 0); } int get(int pos) { int ans = 0; for (; pos >= 0; pos = (pos & (pos + 1)) - 1){ ans += tree[pos]; } return ans; } void upd(int pos, int val) { for (; pos < n; pos |= (pos + 1)){ tree[pos] += val; } } void upd(int l, int r, int add) { upd(l, add); upd(r + 1, -add); } }; fenvik val; int get(int i, int j) { int L = a[i] + val.get(i); int R = a[j] + val.get(j); if (L < R) return 1; else return 0; } int sum1, sum2; void del(int i) { if (get(i, i + 1)) { sum1 -= a[i] + val.get(i) - a[i + 1] - val.get(i + 1); } else sum2 -= a[i] + val.get(i) - a[i + 1] - val.get(i + 1); } void add(int i) { if (get(i, i + 1)) { sum1 += a[i] + val.get(i) - a[i + 1] - val.get(i + 1); } else sum2 += a[i] + val.get(i) - a[i + 1] - val.get(i + 1); } void build() { val = fenvik(n); sum1 = 0, sum2 = 0; for (int i = 0; i + 1 < n; i++) { add(i); } } int solve() { int l, r, x; cin >> l >> r >> x; if (l > 0) del(l - 1); if (r + 1 < n) del(r); val.upd(l, r, x); if (l > 0) add(l - 1); if (r + 1 < n) add(r); return sum1 * s + sum2 * t; } vector<int> ans; void run() { build(); while (q--) { ans.push_back(solve()); } } void write() { for (auto i : ans) cout << i << "\n"; } signed main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); read(); run(); write(); return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...