Submission #1140678

#TimeUsernameProblemLanguageResultExecution timeMemory
1140678Jawad_Akbar_JJSprinklers (CEOI24_sprinklers)C++20
0 / 100
64 ms840 KiB
#include <iostream>
#include <algorithm>

using namespace std;
const int N = 2e5;
int a[N], b[N], Mx[N], Par[N], type[N], dir[N], n, m;

void update(int i, int j, int val, int tp){
	if (Mx[j] >= val)
		return;
	Mx[j] = val;
	Par[j] = i;
	type[j] = tp;
}

bool check(int K, bool print = 0){
	for (int i=1;i<=n + 1;i++)
		Mx[i] = 1;

	for (int i=1;i<=n;i++){
		update(i-1, i, Mx[i-1], 1);
		// Mx[i] = max(Mx[i], Mx[i-1]);
		if (Mx[i] < m + 1 and b[Mx[i]] < Mx[i-1] and a[i] - K <= b[Mx[i]]){
			int u = upper_bound(b, b + m + 1, a[i]) - b;
			update(i, i + 1, u, 1);
			// Mx[i + 1] = max(Mx[i + 1], u);
		}

		if (Mx[i] < m + 1 and b[Mx[i]] >= a[i]){
			int u = upper_bound(b, b + m + 1, a[i] + K) - b;
			update(i, i + 1, u, 2);
			// Mx[i + 1] = max(Mx[i + 1], u);
		}

		if (Mx[i] < m + 1 and i < n and a[i + 1] - K <= b[Mx[i] + 1]){
			int u = upper_bound(b, b + m + 1, a[i] + K) - b;
			update(i, i + 2, u, 3);
			// Mx[i + 2] = max(Mx[i + 2], u);
		}
	}

	if (print){
		int nn = n;
		while (n){
			if (type[n] > 1)
				dir[Par[n]] = 1;
			n = Par[n];
			// cout<<n<<endl;
		}
		cout<<K<<'\n';
		for (int i=1;i<=nn;i++)
			cout<<(dir[i] ? 'R' : 'L');
		cout<<'\n';
		exit(0);
	}

	return max(Mx[n], Mx[n + 1]) >= m + 1;
}

int main(){
	cin>>n>>m;

	for (int i=1;i<=n;i++)
		cin>>a[i];
	
	for (int i=1;i<=m;i++)
		cin>>b[i];

	b[m + 1] = 2.1e9;

	if (n == 1 and a[1] > b[1] and a[1] < b[m])
		return cout<<"-1\n", 0;

	// for (int i=1;i<=10;i++)
	// 	cout<<check(i)<<'\n';

	// check(6, 1);

	int l = -1, r = 1e9 + 10;

	while (l + 1 < r){
		int mid = (l + r) / 2;
		if (check(mid))
			r = mid;
		else
			l = mid;
	}
	check(r, 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...
#Verdict Execution timeMemoryGrader output
Fetching results...