Submission details
Task:Sprinklers
Sender:aatukaj
Submission time:2025-03-03 15:26:48 +0200
Language:C++ (C++17)
Status:COMPILE ERROR

Compiler report

input/code.cpp: In function 'void solve()':
input/code.cpp:84:52: error: 'class std::set<int>' has no member named 'upper__bound'; did you mean 'upper_bound'?
   84 |                                         it = right.upper__bound(f[i]);
      |                                                    ^~~~~~~~~~~~
      |                                                    upper_bound

Code

#include <bits/stdc++.h>
using namespace std;

const int mxN = 1e5;
const int INF = 1e9;
#define ff first
#define ss second
#define all(v) (v).begin(), (v).end()

void solve() {
	int n, m;
	cin >> n >> m;
	vector<int> s(n), f(m);
	for (int i=0; i<n; i++) cin >> s[i];
	for (int j=0; j<m; j++) cin >> f[j];
	vector<int> x;
	for (auto u: f) {
		if (!binary_search(all(s), u) || (x.size() && x.back()==u)) x.push_back(u);
	}
	f.swap(x);
	m = f.size();
	bool case1 = n%3==0;
	for (int i=0; i<n-2; i+=3) {
		case1 &= s[i] == s[i+1] && s[i+1]==s[i+2];
	}
	if (case1) {
		int l = -1, r=1e9+1;
		while (r-l>1) {
			set<int> sprinklers;
			int k = (r+l)/2;
			for (int i=0; i<n; i++) sprinklers.insert(s[i]);
			/*
			auto upd = [&](int i, char dir) {
				if (dir=='L') {
					auto it = flowers.lower_bound(s[i]);
					while (it!=flowers.begin()) {
						it--;
						if (s[i]-*it>k) break;
						flowers.erase(it);
						it = flowers.lower_bound(s[i]);
					}
				} else {
					auto it = flowers.lower_bound(s[i]);
					while (it!=flowers.end()) {
						if (*it-s[i]>k) break;
						flowers.erase(it);
						it = flowers.lower_bound(s[i]);
					}
				}
				// cur[i] = dir;
			}; */
			bool ok = true;
			for (int i=0; i<m; i++) {
				int dist = 2*1e9;
				auto it = sprinklers.lower_bound(f[i]);
				if (it!=sprinklers.end()) dist = min(dist, *it-f[i]);
				if (it!=sprinklers.begin()) dist = min(dist, f[i]-*(--it));
				ok &= dist<=k;
			}
			if (ok) r = k;
			else l = k;
		}
		cout << r << '\n';
		for (int i=0; i<n/3; i++) {
			cout << "LLR";
		}
		cout << '\n'; 
	} else {
		string ans; int best=2*INF;
		for (int mask=0; mask<1<<n; mask++) {
			set<int> left, right;
			for (int i=0; i<n; i++) {
				if (mask>>i&1) right.insert(s[i]);
				else left.insert(s[i]);
			}
			int l =-1, r=2*INF;
			while (r-l>1) {
				int k = (r+l)/2;
				bool ok = true;
				for (int i=0; i<m; i++) {
					int dist = 2*INF;
					auto it = left.lower_bound(f[i]);
					if (it!=left.end()) dist = min(dist, *it-f[i]);
					it = right.upper__bound(f[i]);
					if (it!=right.begin()) dist = min(dist, f[i]-*(--it));
					ok &= dist<=k;
				}
				if (ok) r = k;
				else l = k;
			}
			if (r<best) {
				string cur('?', n);
				for (int i=0; i<n; i++) {
					if (mask>>i&1) cur[i] = 'R';
					else cur[i] = 'L';
				}
				ans = cur;
				best = r;
			}
		}
		if (best==2*INF) {
			cout << "-1";
		} else {
			cout << best << '\n';
			cout << ans << '\n';
		}
	}

} 
int main() {
	ios_base::sync_with_stdio(0);
	cin.tie(0);
	solve();
}