Submission #412998

#TimeUsernameProblemLanguageResultExecution timeMemory
412998joseacazSnowball (JOI21_ho_t2)C++17
33 / 100
2589 ms5648 KiB
#include <bits/stdc++.h> using namespace std; typedef long long ll; typedef long double ld; typedef unsigned long long ull; typedef pair<int, int> pii; typedef pair<ll, ll> pll; typedef vector<int> vi; typedef vector<ll> vl; typedef vector<pii> vpi; typedef vector<pll> vpl; #define sz(x) (int)x.size() #define all(x) x.begin(), x.end() #define pb push_back const int MAXN = (int)2e5 + 5; const ll INF = (1LL << 62LL); int N, Q; ll a[MAXN], spacesL[MAXN], spacesR[MAXN], W[MAXN]; ll l[MAXN], r[MAXN], pos; ll finalL[MAXN], finalR[MAXN]; int main() { ios_base::sync_with_stdio(0); cin.tie(0); cin >> N >> Q; for(int i = 1; i <= N; i++) cin >> a[i]; a[0] = -INF, a[N + 1] = INF; for(int i = 0; i <= N + 1; i++) { if(i < N + 1) spacesR[i] = a[i + 1] - a[i]; if(i > 0) spacesL[i] = a[i] - a[i - 1]; } for(int q = 1; q <= Q; q++) { cin >> W[q]; pos += W[q]; l[q] = min(l[q - 1], pos); r[q] = max(r[q - 1], pos); if(l[q] < l[q - 1]) { //cerr << l[q] << " " << r[q] << "\n"; ll delta = l[q - 1] - l[q]; for(int i = 1; i <= N + 1; i++) { if(spacesL[i] > 0 && spacesL[i] - delta <= 0) finalL[i] = a[i] + l[q - 1] - spacesL[i]; spacesL[i] -= delta; //cerr << spacesL[i] << " "; } //cerr << "\n"; for(int i = 0; i <= N; i++) { if(spacesR[i] > 0 && spacesR[i] - delta <= 0) finalR[i] = a[i] + r[q - 1]; spacesR[i] -= delta; //cerr << spacesR[i] << " "; } //cerr << "INF\n"; } else if(r[q] > r[q - 1]) { ll delta = r[q] - r[q - 1]; //cerr << l[q] << " " << r[q] << "\n"; //cerr << "INF" << " "; for(int i = 1; i <= N + 1; i++) { if(spacesL[i] > 0 && spacesL[i] - delta <= 0) finalL[i] = a[i] + l[q - 1]; spacesL[i] -= delta; //cerr << spacesL[i] << " "; } //cerr << "\n"; for(int i = 0; i <= N; i++) { if(spacesR[i] > 0 && spacesR[i] - delta <= 0) finalR[i] = a[i] + r[q - 1] + spacesR[i]; spacesR[i] -= delta; //cerr << spacesR[i] << " "; } //cerr << "INF\n"; } } for(int i = 1; i <= N; i++) { if(spacesL[i] > 0) finalL[i] = a[i] + l[Q]; if(spacesR[i] > 0) finalR[i] = a[i] + r[Q]; //cerr << finalL[i] << " " << finalR[i] << "\n"; cout << finalR[i] - finalL[i] << "\n"; } return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...