Submission #476884

#TimeUsernameProblemLanguageResultExecution timeMemory
476884RainbowbunnySnowball (JOI21_ho_t2)C++17
100 / 100
112 ms18632 KiB
#include <bits/stdc++.h> using namespace std; const int MAXN = 2e5 + 5; int n, q; long long X[MAXN], W[MAXN], Min[MAXN], Max[MAXN], L[MAXN], R[MAXN]; vector <long long> V; int main() { ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0); cin >> n >> q; for(int i = 0; i < n; i++) { cin >> X[i]; } for(int i = 0; i < q; i++) { cin >> W[i]; if(i == 0) { Min[i] = min(Min[i], W[i]); Max[i] = max(Max[i], W[i]); } else { W[i] += W[i - 1]; Min[i] = min(Min[i - 1], W[i]); Max[i] = max(Max[i - 1], W[i]); } V.push_back(Max[i] - Min[i]); } for(int i = 0; i < n; i++) { L[i] = X[i] + Min[q - 1]; R[i] = X[i] + Max[q - 1]; } for(int i = 0; i + 1 < n; i++) { int id = lower_bound(V.begin(), V.end(), X[i + 1] - X[i]) - V.begin(); if(id == q) { continue; } long long tmp = W[id] - (id == 0 ? 0 : W[id - 1]); if(tmp > 0) { R[i] = X[i + 1] + Min[id]; L[i + 1] = X[i + 1] + Min[id]; } else { R[i] = X[i] + Max[id]; L[i + 1] = X[i] + Max[id]; } } for(int i = 0; i < n; i++) { cout << R[i] - L[i] << '\n'; } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...