제출 #1314802

#제출 시각아이디문제언어결과실행 시간메모리
1314802kawhietRobots (IOI13_robots)C++20
100 / 100
1581 ms19060 KiB
#include <bits/stdc++.h> #include "robots.h" using namespace std; int putaway(int n, int m, int t, int _x[], int _y[], int _w[], int _s[]) { vector<int> x(n), y(m), w(t), s(t); for (int i = 0; i < n; i++) { x[i] = _x[i]; } for (int i = 0; i < m; i++) { y[i] = _y[i]; } vector<int> ord(t); iota(ord.begin(), ord.end(), 0); ranges::sort(ord, [&](int i, int j) { return _w[i] < _w[j]; }); for (int i = 0; i < t; i++) { w[i] = _w[ord[i]]; s[i] = _s[ord[i]]; } ranges::sort(x); ranges::sort(y); auto good = [&](int k) { int pos = 0; vector<bool> removed(t); priority_queue<pair<int, int>> q; for (int i = 0; i < n; i++) { int l = pos; while (pos < t && w[pos] < x[i]) { q.push({s[pos], pos}); pos++; } for (int j = 0; j < k; j++) { if (q.empty()) break; int r = q.top().second; q.pop(); removed[r] = 1; } } vector<int> a; for (int i = 0; i < t; i++) { if (!removed[i]) { a.push_back(s[i]); } } ranges::sort(a); int sz = a.size(); if (1LL * m * k < sz) { return false; } vector<int> b(sz); int ptr = m - 1; for (int j = sz - 1; j >= 0; j -= k) { for (int i = j; i >= max(0, j - k); i--) { b[i] = y[ptr]; } ptr--; if (ptr == -1) { break; } } for (int i = 0; i < sz; i++) { if (a[i] >= b[i]) { return false; } } return true; }; int tl = 0, tr = t; if (!good(t)) { return -1; } while (tl + 1 < tr) { int tm = (tl + tr) / 2; if (good(tm)) { tr = tm; } else { tl = tm; } } return tr; }
#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...