#include<bits/stdc++.h>
#define int long long
using namespace std;
string ansstr;
bool check(int x, vector<int> a, vector<int> b)
{
int maximum = -1e9, lastval = -1e9; string curstr;
vector<int> last_maximum = {maximum};
bool last_support = 0;
for(int i : a){
int p = lower_bound(b.begin(), b.end(), i) - b.begin();
if(p == 0 || b[p-1] <= maximum){
maximum = i + x; last_maximum.push_back(maximum);
curstr += "R";
continue;
}
p = upper_bound(b.begin(), b.end(), maximum) - b.begin();
if(p < b.size() && b[p] < i - x) return 0;
maximum = max(maximum, i); curstr += "L";
//But sometimes, we could modify the element before that to R
if(curstr.size() >= 2 && curstr[curstr.size()-2] == 'L'){
p = lower_bound(b.begin(), b.end(), i-x) - b.begin();
if(p == 0 || b[p-1] <= last_maximum[last_maximum.size()-2]){
curstr[curstr.size()-2] = 'R';
if(last_support == 1) curstr[curstr.size()-3] = 'L';
maximum = max(maximum, lastval + x);
last_support = 1;
}
else last_support = 0;
}
else last_support = 0;
lastval = i; last_maximum.push_back(maximum);
}
if(maximum < b.back()) return 0;
ansstr = curstr;
return 1;
}
signed main()
{
ios_base::sync_with_stdio(false);
cin.tie(0);
int n, m;
cin>>n>>m;
vector<int> a(n), b;
for(int i = 0; i < n; i++) cin>>a[i];
for(int i = 0; i < m; i++){
int x; cin>>x;
if((b.size() == 0 || b.back() != x) && (x > a.back() || *lower_bound(a.begin(), a.end(), x) != x)) b.push_back(x);
}
if(b.size() == 0){
cout<<0<<'\n';
for(int i = 1; i <= n; i++) cout<<"L";
return 0;
}
//cout<<check(1000, a, b);
//return 0;
int l = 0, r = 1e9, ans = -1;
string str;
while(l <= r){
int mid = (l+r)/2;
if(check(mid, a, b) == 1){ans = mid; r = mid-1;}
else l = mid+1;
}
cout<<ans<<'\n';
if(ans > -1) cout<<ansstr;
}
# | 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... |