Submission #1208971

#TimeUsernameProblemLanguageResultExecution timeMemory
1208971dima2101Snowball (JOI21_ho_t2)C++20
100 / 100
182 ms16144 KiB
#include <bits/stdc++.h> #define int long long signed main() { std::ios::sync_with_stdio(false); std::cin.tie(0); int n, q; std::cin >> n >> q; std::vector<int> x(n); std::vector<std::pair<int, int>> delta_s(n - 1); for (int i = 0; i < n; i++) { std::cin >> x[i]; } for (int i = 0; i < n - 1; i++) { delta_s[i].first = x[i + 1] - x[i]; delta_s[i].second = i; } std::vector<int> w(q); for (int i = 0; i < q; i++) { std::cin >> w[i]; } std::vector<int> left(n); std::vector<int> right(n); std::vector<int> pref_min(q, 0); std::vector<int> pref_max(q, 0); std::vector<int> pref(q, 0); pref[0] = w[0]; for (int i = 1; i < q; i++) { pref[i] = pref[i - 1] + w[i]; } for (int i = 0; i < q; i++) { if (i == 0) { pref_min[i] = std::min(pref_min[i], pref[i]); pref_max[i] = std::max(pref_max[i], pref[i]); } else { pref_min[i] = std::min(pref_min[i - 1], pref[i]); pref_max[i] = std::max(pref_max[i - 1], pref[i]); } } std::sort(delta_s.begin(), delta_s.end()); int l = 0; for (int i = 0; i < q; i++) { while (l < n - 1 && pref_max[i] - pref_min[i] >= delta_s[l].first) { // std::cout << l << ' ' << pref_max[i] << ' ' << pref_min[i] << ' ' << delta_s[i].second << std::endl; if (i == 0) { if (pref_max[i] != 0) { right[delta_s[l].second] = delta_s[l].first; } else { left[delta_s[l].second + 1] = delta_s[l].first; } } else { if (pref_max[i] != pref_max[i - 1]) { right[delta_s[l].second] = pref_max[i - 1] + (delta_s[l].first - pref_max[i - 1] + pref_min[i]); left[delta_s[l].second + 1] = -pref_min[i]; } else { left[delta_s[l].second + 1] = delta_s[l].first - pref_max[i]; right[delta_s[l].second] = pref_max[i]; } } l++; } } for (l; l < n - 1; l++) { right[delta_s[l].second] = pref_max.back(); left[delta_s[l].second + 1] = -pref_min.back(); } left[0] = -pref_min.back(); right.back() = pref_max.back(); for (int i = 0; i < n; i++) { std::cout << left[i] + right[i] << std::endl; } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...