Submission #418068

#TimeUsernameProblemLanguageResultExecution timeMemory
418068balbitThe short shank; Redemption (BOI21_prison)C++14
100 / 100
577 ms241672 KiB
#include <bits/stdc++.h> using namespace std; #define ll long long #define pii pair<int, int> #define f first #define s second #define ALL(x) (x).begin(), (x).end() #define SZ(x) (int)((x).size()) #define pb push_back #define MX(a,b) a = max(a,b) #define MN(a,b) a = min(a,b) #define REP(i,n) for (int i = 0; i<n; ++i) #define REP1(i,n) for (int i = 1; i<=n; ++i) #ifdef BALBIT #define bug(...) cerr<<"#"<<__LINE__<<": "<<#__VA_ARGS__<<"- ", _do(__VA_ARGS__) template<typename T> void _do( T && x) {cerr<<x<<endl;} template<typename T, typename ...S> void _do( T && x, S && ...y) {cerr<<x<<", "; _do(y...);} #else #define bug(...) #define endl '\n' #endif // BALBIT const int maxn = 2e6+6; int par[maxn]; bool done[maxn]; int to[maxn]; int h[maxn]; bool isleaf[maxn]; int dep[maxn]; vector<pii> hey; vector<int>g[maxn]; void dfs(int v) { hey.pb({dep[v], v}); for (int u : g[v]) { dep[u] = dep[v] + 1; dfs(u); } } signed main(){ ios::sync_with_stdio(0), cin.tie(0); memset(par, -1, sizeof par); memset(to, -1, sizeof to); int n,D,T; cin>>n>>D>>T; int mightreb = 0; int willreb = 0; vector<int> q; vector<int> tos; REP(i,n) { cin>>h[i]; while (!q.empty() && h[q.back()] - q.back() > T - i ) { q.pop_back(); } if (h[i] > T) { if (!q.empty() ) { to[i] = q.back(); bug(i, to[i]); // isleaf[i] = 1; while (!tos.empty() && to[tos.back()] >= to[i]) { // isleaf[i] = 0; par[tos.back()] = i; g[i].pb(tos.back()); tos.pop_back(); } tos.pb(i); mightreb ++; } }else{ willreb++; } q.pb(i); } REP(i,n) { if (to[i]!=-1 && par[i] == -1) { // is root dfs(i); } } sort(ALL(hey), greater<pii>()); vector<int> tk; for (pii xx : hey) { int x = xx.s; if (done[x]) continue; int len = 0; for( int at = x; at != -1 && !done[at]; at = par[at]) { done[at] = 1; ++len; } tk.pb(len); bug(len); } sort(ALL(tk), greater<int>()); REP(i, min(SZ(tk), D)) { mightreb -= tk[i]; } bug(mightreb, willreb); cout<<mightreb + willreb<<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...