제출 #1116405

#제출 시각아이디문제언어결과실행 시간메모리
1116405staszic_ojuzFoehn Phenomena (JOI17_foehn_phenomena)C++17
30 / 100
1064 ms9808 KiB
#include <bits/stdc++.h> using namespace std; void upd(vector<long long>& tree, long long w, long long in, long long v) { in += w; tree[in] += v; for (in /= 2; in > 0; in /= 2) { tree[in] = tree[2 * in] + tree[2 * in + 1]; } } long long sum(const vector<long long>& tree, long long w, long long left, long long right) { long long result = 0; left += w; right += w; while (left < right) { if (left % 2 == 1) result += tree[left++]; if (right % 2 == 1) result += tree[--right]; left /= 2; right /= 2; } return result; } long long li(vector <long long> domy, vector<long long> v, long long i) { return sum(domy, v.size(), 0, i + 1) + v[i]; } int main() { ios_base::sync_with_stdio(0); cin.tie(0); long long n, q, s, t, w = 0, l, p, va, p1, p2, l1, l2; cin >> n >> q >> s >> t; n += 1; vector<long long> domy(2 * n); vector<long long> v(n); for (long long i = 0; i < n; i++) { cin >> v[i]; if (i > 0 && v[i - 1] < v[i]) { w -= s * (v[i] - v[i - 1]); } else if(i > 0 && v[i - 1] > v[i]) { w += t * (v[i - 1] - v[i]); } } for (long long i = 0; i < q; i++) { cin >> l >> p >> va; l1 = li(domy, v, l - 1); l2 = li(domy, v, l); if (l1 < l2) { w += s * (l2 - l1); } else { w -= t * (l1 - l2); } if (p < n - 1) { p1 = li(domy, v, p); p2 = li(domy, v, p + 1); if (p1 < p2) { w += s * (p2 - p1); } else { w -= t * (p1 - p2); } } upd(domy, n, l, va); if (p < n - 1) { upd(domy, n, p + 1, -va); } l1 = li(domy, v, l - 1); l2 = li(domy, v, l); if (l1 < l2) { w -= s * (l2 - l1); } else { w += t * (l1 - l2); } if (p < n - 1) { p1 = li(domy, v, p); p2 = li(domy, v, p + 1); if (p1 < p2) { w -= s * (p2 - p1); } else { w += t * (p1 - p2); } } cout << w << endl; } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...