This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include <bits/stdc++.h>
#include "robots.h"
using namespace std;
const int N = 50500;
vector<pair<int, int>> vec;
int weak[N], small[N];
int a, b, t;
bool solve(int mid){
priority_queue<pair<int, int>> q;
int idx = 0;
// cout << a << endl;
for(int i = 0; i < a; i++){
while(idx < t && vec[idx].first < weak[i]){
q.push({vec[idx].second, vec[idx].first});
idx++;
}
int kill = mid;
while(kill-- && q.size()){
q.pop();
}
}
while(idx < t){
q.push({vec[idx].second, vec[idx].first});
idx++;
}
vector<int> f;
while(q.size()){
f.push_back(q.top().first);
q.pop();
}
for(int i = 0; i < b; i++){
int kill = mid;
while(kill-- && f.size() && f.back() < small[i]){
f.pop_back();
}
}
// if(mid == 2) cout << f.size() << endl;
return f.empty();
}
int putaway(int A, int B, int T, int X[], int Y[], int w[], int s[]) {
a = A, b = B, t = T;
for(int i = 0; i < a; i++){
weak[i] = X[i];
}
sort(weak, weak + a);
for(int i = 0; i < b; i++){
small[i] = Y[i];
}
sort(small, small + b);
for(int i = 0; i < t; i++){
vec.push_back({w[i], s[i]});
}
sort(vec.begin(), vec.end());
int l = 1, r = t, ans = -1;
while(l <= r){
int mid = (l + r) / 2;
// cout << "-> " << mid << endl;
if(solve(mid)){
r = mid - 1;
ans = mid;
}
else{
l = mid + 1;
}
}
return ans;
}
# | 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... |