Submission #405138

#TimeUsernameProblemLanguageResultExecution timeMemory
405138Aryan_RainaRobots (IOI13_robots)C++14
100 / 100
1784 ms24276 KiB
#include "robots.h"
#include <bits/stdc++.h>
using namespace std;

#define ar array
const int INF = 1e9+9;

int putaway(int A, int B, int T, int X[], int Y[], int W[], int S[]) {
	ar<int,2> toy[T];
	for (int i = 0; i < T; i++) toy[i] = {W[i], S[i]};

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

	auto check = [&](int remdi) {
		priority_queue<int> pq;

		// choose as many toys u can with max S, and move out with X
		int j = 0;
		for (int i = 0; i < A; i++) {
			for (; j < T && toy[j][0] < X[i]; j++) pq.push(toy[j][1]);
			for (int r = 0; r < remdi && !pq.empty(); r++) pq.pop();
		}

		// add in remaining toys
		for (; j < T; j++) pq.push(toy[j][1]);

		// use Y bots to move out
		for (int i = B - 1; i >= 0; i--)
			for (int r = 0; r < remdi && !pq.empty() && pq.top() < Y[i]; r++) 
				pq.pop();

		return pq.empty();
	};

	int ans = INF, lo = 0, hi = T, mid;
	while (lo <= hi) {
		mid = (lo + hi) >> 1;
		if (check(mid)) hi = mid - 1, ans = mid;
		else lo = mid + 1;
	}

    return ans == INF ? -1 : ans;
}
#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...