#include<bits/stdc++.h>
using namespace std;
#define int long long
const int INF = 4e9;
int n,m;
int s[100005],f[100005];
bool broken[100005];
char dir[100005];
map<int,int> mp;
bool verif(int k)
{
vector<bool> used(n+2,0);
int ps=1,pf=1;
while(ps<=n || pf<=m)
{
if(ps<=n && (pf>m || s[ps] < f[pf]))
{
if(!used[ps])
{
dir[ps] = 'R';
while(pf<=m && f[pf] <= s[ps] + k)
pf++;
}
ps++;
}
else
{
if(ps>n || f[pf] < s[ps] - k)
return 0;
if(!broken[ps] && ps+1<=n && f[pf] >= s[ps+1] - k)
{
used[ps] = used[ps+1] = 1;
dir[ps] = 'R';
dir[ps+1] = 'L';
while(pf<=m && f[pf] <= s[ps+1])
pf++;
ps += 2;
}
else
{
assert(used[ps] == 0);
used[ps] = 1;
dir[ps] = 'L';
while(pf<=m && f[pf] <= s[ps])
pf++;
ps++;
}
}
}
return 1;
}
signed main()
{
cin>>n>>m;
for(int i=1;i<=n;i++)
{
cin>>s[i];
mp[s[i]]++;
}
for(int i=1;i<=m;i++)
{
cin>>f[i];
if(mp[f[i]])
{
i--;
m--;
}
}
for(int i=1;i<n;i++)
{
broken[i] = 1;
for(int j=1;j<=m;j++)
{
if(s[i] < f[j] && f[j] < s[i+1])
{
broken[i] = 0;
break;
}
}
}
if(!verif(INF))
{
cout<<-1;
return 0;
}
int st=0,dr=INF,ans=INF;
while(st<=dr)
{
int mij=(st+dr)/2;
if(verif(mij))
{
ans = mij;
dr = mij-1;
}
else
st = mij+1;
}
verif(ans);
cout<<ans<<"\n";
for(int i=1;i<=n;i++)
cout<<dir[i];
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... |