제출 #46662

#제출 시각아이디문제언어결과실행 시간메모리
46662maksim_gaponovFoehn Phenomena (JOI17_foehn_phenomena)C++14
100 / 100
183 ms7632 KiB
#define _CRT_SECURE_NO_WARNINGS #ifdef KEK #define FILE_IN "input.txt" #define FILE_OUT "output.txt" #endif #include <iostream> #include <cstdlib> #include <climits> #include <set> #include <map> #include <cstdio> #include <string> #include <cstring> #include <cassert> #include <vector> #include <algorithm> #include <queue> using namespace std; typedef long long ll; void openFiles() { #ifdef KEK assert(freopen(FILE_IN, "r", stdin)); assert(freopen(FILE_OUT, "w", stdout)); #endif } const int MAXN = 200000 + 10; ll a[MAXN]; int n, q, s_up, s_down; ll delta[MAXN]; int sign(ll f) { return (f >= 0); } int main() { openFiles(); ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); cin >> n >> q >> s_up >> s_down; n++; for (int i = 0; i < n; i++) { cin >> a[i]; } ll up_cnt = 0, down_cnt = 0; for (int i = 1; i < n; i++) { delta[i] = a[i] - a[i - 1]; if (a[i] > a[i - 1]) { up_cnt += delta[i]; } else { down_cnt += -delta[i]; } } for (int j = 0; j < q; j++) { int l, r; ll x; cin >> l >> r >> x; ll left_dist = delta[l]; ll right_dist = delta[r + 1]; delta[l] += x; delta[r + 1] -= x; if (sign(delta[l]) == sign(left_dist)) { if (sign(left_dist) == 1) { up_cnt += x; } else { down_cnt -= x; } } else { if (sign(left_dist) == 1) { up_cnt -= left_dist; down_cnt += -delta[l]; } else { down_cnt -= -left_dist; up_cnt += delta[l]; } } if (r != n - 1) { if (sign(delta[r + 1]) == sign(right_dist)) { if (sign(right_dist) == 1) { up_cnt -= x; } else { down_cnt += x; } } else { if (sign(right_dist) == 1) { up_cnt -= right_dist; down_cnt += -delta[r + 1]; } else { down_cnt -= -right_dist; up_cnt += delta[r + 1]; } } } ll res = down_cnt * s_down - up_cnt * s_up; cout << res << "\n"; } return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...