Submission #1283142

#TimeUsernameProblemLanguageResultExecution timeMemory
1283142Jawad_Akbar_JJRobots (IOI13_robots)C++20
100 / 100
1684 ms11328 KiB
#include <iostream>
#include <vector>
#include <set>
#include <algorithm>
#include "robots.h"

using namespace std;
int cnt1[50005], cnt2[50005];

bool valid(int T, vector<pair<int,int>> &vc, int A, int X[], int B, int Y[], int tm){
	for (int i=0;i<50005;i++)
		cnt1[i] = cnt2[i] = 0;
	set<pair<int,int>> st;
	for (int i=0;i<B;i++)
		st.insert({Y[i], i});
	for (int i=T-1, lst = A - 1;i>=0;i--){
		auto u = st.upper_bound({vc[i].second + 1, -1});
		if (u == end(st)){
			if (lst < 0 or X[lst] <= vc[i].first)
				return 0;
			cnt1[lst]++;
			if (cnt1[lst] == tm)
				lst--;
		}
		else{
			cnt2[(*u).second]++;
			if (cnt2[(*u).second] == tm)
				st.erase(u);
		}
	}
	return 1;
}

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

	vector<pair<int,int>> vc;
	for (int i=0;i<T;i++)
		vc.push_back({W[i], S[i]});

	sort(begin(vc), end(vc));

	int l = 0, r = T + 1;
	while (l + 1 < r){
		int mid = (l + r) / 2;
		if (valid(T, vc, A, X, B, Y, mid))
			r = mid;
		else
			l = mid;
	}
	if (r == T + 1)
		r = -1;
	return r;
}
#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...