제출 #290097

#제출 시각아이디문제언어결과실행 시간메모리
290097Fischer로봇 (IOI13_robots)C++14
100 / 100
2296 ms19580 KiB
#include <bits/stdc++.h> #include"robots.h" using namespace std; const int maxn = 1e6 + 10; int ind[maxn]; int putaway(int A, int B, int T, int X[], int Y[], int W[], int S[]) { for (int i=0; i<T; ++i) ind[i] = i; sort(ind, ind+T, [&](int p, int q) { return W[p] < W[q]; }); sort(X, X+A); sort(Y, Y+B); auto f = [&](int x) { priority_queue<int> q; int j=0; for (int i=0; i<A; ++i) { while (j < T && W[ind[j]] < X[i]) { q.push(S[ind[j]]); j += 1; } for (int k=0; k<x && !q.empty(); ++k) q.pop(); } priority_queue<int, vector<int>, greater<int>> p; while (j < T) p.push(S[ind[j++]]); while (!q.empty()) p.push(q.top()), q.pop(); for (int i=0; i<B; ++i) { for (int k=0; k<x && !p.empty(); ++k) { if (p.top() < Y[i]) p.pop(); else break; } } return p.empty(); }; int lo = 1, hi = T; while (lo < hi) { int mid = lo+(hi-lo)/2; if (!f(mid)) lo = mid+1; else hi=mid; } if (!f(lo)) return -1; return lo; } /** int X[maxn], Y[maxn], W[maxn], S[maxn]; int main() { int A, B, T; scanf("%d%d%d", &A, &B, &T); for (int i=0; i<A; ++i) scanf("%d", X+i); for (int i=0; i<B; ++i) scanf("%d", Y+i); for (int i=0; i<T; ++i) scanf("%d%d", W+i, S+i); printf("%d\n", putaway(A, B, T, X, Y, W, S)); return 0; } **/
#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...