Submission #720759

#TimeUsernameProblemLanguageResultExecution timeMemory
720759JohannThe short shank; Redemption (BOI21_prison)C++14
0 / 100
147 ms10468 KiB
#include <bits/stdc++.h> using namespace std; #define ll long long #define pii pair<int, int> #define vb vector<bool> #define vi vector<int> #define vpii vector<pii> #define vvb vector<vb> #define vvi vector<vi> #define vvpii vector<vpii> #define sz(x) (int)(x).size() int N, D, T; vi F, NF; vector<priority_queue<pii, vpii, greater<pii>>> Q; vi P; int main() { ios::sync_with_stdio(false); cin.tie(0); cout.tie(0); cin >> N >> D >> T; D = min(D, N); P.resize(N); for (int i = 0; i < N; ++i) cin >> P[i]; F.assign(D + 1, 0), NF.assign(D + 1, 0); Q.resize(D + 1); for (int i = 0; i < N; ++i) { for (int d = 0; d <= D; ++d) { NF[d] = min(F[d], NF[d]); if (d < D) F[d + 1] = min(F[d + 1], NF[d]); ++NF[d]; if (P[i] <= T) { F[d] = INT_MAX; int nextBorder = min(N - 1, i + T - P[i]); Q[d].push({nextBorder, NF[d] + nextBorder - i}); } while (!Q[d].empty() && Q[d].top().first == i) { F[d] = min(F[d], Q[d].top().second); Q[d].pop(); } NF[d] = min(NF[d], F[d]); } } cout << NF[D] << endl; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...