Submission #870399

#TimeUsernameProblemLanguageResultExecution timeMemory
870399aaron_dcoderSnowball (JOI21_ho_t2)C++17
100 / 100
223 ms14408 KiB
#define NDEBUG #ifdef NDEBUG #define dbg(TXTMSG) if constexpr (false) cerr << "lol" #define dbgv(VARN) ((void)0) #define dbgfor(COND) if constexpr (false) for (COND) #else #define _GLIBCXX_DEBUG 1 #define _GLIBCXX_DEBUG_PEDANTIC 1 #pragma GCC optimize("trapv") #define dbg(TXTMSG) cerr << "\n" << TXTMSG #define dbgv(VARN) cerr << "\n" << #VARN << " = "<< VARN << ", line: " << __LINE__ << "\n" #define dbgfor(COND) for (COND) #endif #include <bits/stdc++.h> using namespace std; using ll = long long; using pll = pair<ll,ll>; #define e0 first #define e1 second constexpr ll INFTY = 1e11; struct snowscape { ll lsnowgone; ll rsnowgone; bool operator <(ll oth) const { return (lsnowgone+rsnowgone) < oth; } bool operator !=(const snowscape& oth) const { return pll{lsnowgone,rsnowgone} != pll{oth.lsnowgone,oth.rsnowgone}; } }; int main() { ll N,Q; cin >> N >> Q; vector<ll> X(N); vector<ll> W(Q); for (ll i = 0; i < N; ++i) { cin >> X[i]; } for (ll i = 0; i < Q; ++i) { cin >> W[i]; } snowscape curr = {0,0}; vector<snowscape> landmarks = {curr,}; ll cpos=0; for (ll wi : W) { cpos+=wi; curr.lsnowgone = max(curr.lsnowgone,cpos); curr.rsnowgone = max(curr.rsnowgone,-cpos); if (curr!=*landmarks.crbegin()) landmarks.push_back(curr); } vector<ll> outp(N); outp[0]+=landmarks.crbegin()->rsnowgone; outp[N-1]+=landmarks.crbegin()->lsnowgone; dbgv(landmarks.crbegin()->rsnowgone); for (ll i = 0; i < N-1; ++i) { auto lit = lower_bound(landmarks.cbegin(),landmarks.cend(),X[i+1]-X[i]); auto jb = lit-1; if (lit==landmarks.cend()) { outp[i] += jb->lsnowgone; outp[i+1] += jb->rsnowgone; } else { if (lit->lsnowgone > jb->lsnowgone) { outp[i] += (X[i+1]-X[i]) - jb->rsnowgone; outp[i+1] += jb->rsnowgone; } else { outp[i] += jb->lsnowgone; outp[i+1] += (X[i+1]-X[i]) - jb->lsnowgone; } } } for (ll o : outp) { cout << o << "\n"; } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...