#include<bits/stdc++.h>
using namespace std;
const int N = 1e5 + 10;
int s[N], f[N], n, m;
bool cover(vector<pair<int,int> > R)
{
sort(R.begin(), R.end());
multiset<int> rs;
int j = 0;
for(int i = 0; i < m; i++)
{
while(j < R.size() && R[j].first <= f[i])
rs.insert(R[j].second), j++;
while(rs.size() && *rs.begin() < f[i]) rs.erase(rs.begin());
if(rs.empty()) return false;
}
return true;
}
vector<char> create(int x)
{
vector<char> sol;
if(n <= 10)
{
for(int mask = 0; mask < (1 << n); mask++)
{ // 0 means left, 1 means right
vector<pair<int,int> > ranges(n);
for(int i = 0; i < n; i ++)
if((1 << i) & mask)
ranges[i] = {s[i], s[i] + x};
else
ranges[i] = {s[i] - x, s[i]};
if(cover(ranges))
{
sol.resize(n);
for(int i = 0; i < n; i ++)
if((1 << i) & mask)
sol[i] = 'R';
else
sol[i] = 'L';
break;
}
}
return sol;
}
else
{
vector<pair<int,int> > ranges(n);
for(int i = 0; i < n; i ++)
if(i % 3 == 0)
ranges[i] = {s[i], s[i] + x};
else
ranges[i] = {s[i] - x, s[i]};
if(cover(ranges))
{
sol.resize(n);
for(int i = 0; i < n; i ++)
if(i % 3 == 0)
sol[i] = 'R';
else
sol[i] = 'L';
}
}
return sol;
}
bool check(int x) {
vector<char> sol = create(x);
return sol.size();
}
int main()
{
cin >> n >> m;
for(int i = 0; i < n; i ++)
cin >> s[i];
for(int i = 0; i < m; i++)
cin >> f[i];
const int inf = 1e9 + 10;
int l = -1, r = inf;
while(r - l > 1)
{
int mid = (l + r) / 2;
if(check(mid))
r = mid;
else
l = mid;
}
cout << (r == inf ? -1 : r) << endl;
vector<char> sol = create(r);
for(char i : sol)
cout << i;
cout << endl;
return 0;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |