Submission #747876

#TimeUsernameProblemLanguageResultExecution timeMemory
747876JellyTheOctopusSnowball (JOI21_ho_t2)C++17
100 / 100
106 ms15544 KiB
#include <bits/stdc++.h> using namespace std; int N, Q; int main() { ios::sync_with_stdio(false); cin.tie(nullptr); cin >> N >> Q; vector<long long> pos(N+1); for (int i = 1; i <= N; i++) { cin >> pos[i]; } vector<long long> space; vector<long long> L; vector<long long> R; vector<bool> get; // true is left space.push_back(0); L.push_back(0); R.push_back(0); get.push_back(0); long long farLeft = 0; long long farRight = 0; long long curPos = 0; long long spaceCovered = 0; for (int i = 1; i <= Q; i++) { long long add; cin >> add; if (add == 0) continue; curPos += add; if (i == 1) { spaceCovered += abs(curPos); space.push_back(spaceCovered); if (curPos > 0) { farRight = curPos; L.push_back(L.back()+curPos); R.push_back(R.back()); get.push_back(1); } else { farLeft = curPos; L.push_back(L.back()); R.push_back(R.back()-curPos); get.push_back(0); } continue; } if (curPos > farRight) { spaceCovered += abs(farRight-curPos); space.push_back(spaceCovered); L.push_back(L.back()+abs(farRight-curPos)); R.push_back(R.back()); get.push_back(1); farRight = curPos; } if (curPos < farLeft) { spaceCovered += abs(farLeft-curPos); space.push_back(spaceCovered); L.push_back(L.back()); R.push_back(R.back()+abs(farLeft-curPos)); get.push_back(0); farLeft = curPos; } } vector<long long> ans(N+1); for (int i = 1; i < N; i++) { long long diff = abs(pos[i+1]-pos[i]); auto it = lower_bound(space.begin(), space.end(), diff); if (it == space.end()) { ans[i] += L.back(); ans[i+1] += R.back(); continue; } int j = (it-space.begin()); if (get[j]) { ans[i] += diff-R[j]; ans[i+1] += R[j]; } else { ans[i] += L[j]; ans[i+1] += diff-L[j]; } } ans[1] += abs(farLeft); ans[N] += abs(farRight); for (int i = 1; i <= N; i++) { cout << ans[i] << "\n"; } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...