Submission #1238979

#TimeUsernameProblemLanguageResultExecution timeMemory
1238979altern23로봇 (IOI13_robots)C++20
100 / 100
2287 ms23304 KiB
#include "robots.h" #include <bits/stdc++.h> using namespace std; #define ll long long #define pii pair<ll, ll> #define fi first #define sec second const ll INF = 2e18; int putaway(int A, int B, int T, int X[], int Y[], int W[], int S[]) { sort(X, X + A), sort(Y, Y + B); vector<pii> items; for(int i = 0; i < T; i++) items.push_back({W[i], S[i]}); sort(items.begin(), items.end()); ll lf = 1, rg = T, ans = -1; for(;lf <= rg;){ ll mid = (lf + rg) / 2; vector<ll> take_small(B + 5), take_weak(A + 5), unused; set<pii> st; for(int i = 0; i < B; i++){ st.insert({Y[i], i}); } for(int i = T - 1; i >= 0; --i){ auto x = st.lower_bound({items[i].sec, INF}); if(x != st.end()){ take_small[(*x).sec]++; if(take_small[(*x).sec] == mid) st.erase(x); } else{ unused.push_back(i); } } reverse(unused.begin(), unused.end()); bool ok = 1; ll cur = 0; for(auto i : unused){ while(cur < A && (take_weak[cur] >= mid || items[i].fi >= X[cur])) cur++; if(cur == A){ ok = 0; break; } take_weak[cur]++; } if(ok){ ans = mid; rg = mid - 1; } else lf = mid + 1; } return ans; }
#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...