#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 time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |