Submission #67540

#TimeUsernameProblemLanguageResultExecution timeMemory
67540KieranHorganRobots (IOI13_robots)C++17
76 / 100
3050 ms25752 KiB
#pragma GCC optimize("Ofast")
#include "robots.h"
#include <bits/stdc++.h>
using namespace std;

int putaway(int A, int B, int T, int X[], int Y[], int W[], int S[]) {

	vector<pair<int, int>> toys(T);
	for(int i = 0; i < T; i++)
		toys[i] = {W[i], S[i]};
	sort(toys.begin(), toys.end());

	sort(X, X+A);
	sort(Y, Y+B);

	bool imp = 0;
	for(auto p: toys)
		if(p.first >= X[A-1] && p.second >= Y[B-1])
			imp = 1;
	if(imp)
		return -1;

	int lo = 0, hi = T;
	while(lo+1 < hi) {
		int mid = (lo+hi)/2;

		multiset<int, greater<int>> remaining;
		int i = 0;
		for(int a = 0; a < A; a++) {
			while(i < T && toys[i].first < X[a]) {
				remaining.insert(toys[i++].second);
			}
			int j = mid;
			while(!remaining.empty() && j--) {
				remaining.erase(remaining.begin());
			}
		}
		while(i < T) {
			remaining.insert(toys[i++].second);
		}
		for(int b = 0; b < B; b++) {
			int j = mid;
			while(!remaining.empty() && j--) {
				auto it = remaining.upper_bound(Y[b]);
				if(it == remaining.end()) {
					break;
				}
				remaining.erase(it);
			}
		}

		if(remaining.empty()) hi = mid;
		else lo = mid;
	}

    return lo+1;
}
#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...