/*
بسم الله الرحمن الرحيم
Author:
                                                    (:Muhammad Aneeq:)
*/
#include <iostream>
#include <vector>
#include <set>
#include <algorithm>
#warning check the output
using namespace std;
#define int long long
int const N=1e5+10;
int s[N],f[N];
char ans[N]={};
int n,m;
bool vis[N]={};
bool check(int ran)
{
    int ind=0;
    for (int i=0;i<n;i++)
    {
        int z=lower_bound(f,f+m+1,s[i])-f;
        if (z<=ind)
        {
            ans[i]='R';
            ind=upper_bound(f,f+m+1,s[i]+ran)-f;
        }
        else
        {
            int j=i;
            while (j+1<n&&s[j]-f[ind]<=ran)
            {
                int z=lower_bound(f,f+m+1,s[j])-f;
                int y=lower_bound(f,f+m+1,s[j+1])-f;
                if (y!=z)
                    j++;
                else
                    break;
            }
            if (s[j]-f[ind]>ran)
                j--;
            if (j<i)
                return 0;
            for (int k=i;k<j;k++)
            {
                ans[k]='R';
                ind=max(ind,(int)(upper_bound(f,f+m+1,s[k]+ran)-f));
            }
            ans[j]='L';
            ind=max(ind,(int)(upper_bound(f,f+m+1,s[j])-f));
            i=j;
        }
    }
    // cout<<1<<endl;
    // for (int i=0;i<n;i++)
    //     cout<<ans[i];
    // cout<<endl;
    // cout<<f[2]<<endl;
    int dif[m+10]={};
    for (int i=0;i<n;i++)
    {
        if (ans[i]=='L')
        {
            int l=lower_bound(f,f+m+1,s[i]-ran)-f;
            int r=upper_bound(f,f+m+1,s[i])-f;
            // cout<<l<<' '<<r<<endl;
            dif[l]++;
            dif[r]--;
        }
        else
        {
            int l=lower_bound(f,f+m+1,s[i])-f;
            int r=upper_bound(f,f+m+1,s[i]+ran)-f;
            dif[l]++;
            dif[r]--;
        }
    }
    for (int i=1;i<m;i++)
        dif[i]+=dif[i-1];
    for(int i=0;i<m;i++)
    {
        if (dif[i]==0)
        {
            // cout<<i<<endl;
            return 0;
        }
    }
    return 1;
}
inline void solve()
{
    cin>>n>>m;
    for (int i=0;i<n;i++)
        ans[i]='L';
    for (int i=0;i<n;i++)
    {
        cin>>s[i];
    }
    set<int>s1;
    for (int i=0;i<m;i++)
    {
        int x;
        cin>>x;
        // cout<<x<<endl;
        s1.insert(x);
    }
    for (int i=0;i<n;i++)
        s1.erase(s[i]);
    vector<int>f1;
    for (auto i:s1)
        f1.push_back(i);
    m=f1.size();
    for (int i=0;i<m;i++)
        f[i]=f1[i];
    f[m]=1e9+10;
    if (n==1)
    {
        if (s[0]>=f[m-1])
        {
            cout<<s[0]-f[0]<<endl;
            cout<<"L\n";
            return;
        }
        if(s[0]<=f[0])
        {
            cout<<f[m-1]-s[0]<<endl;
            cout<<"R\n";
            return;
        }
        cout<<-1<<endl;return;
    }
    // cout<<check(6)<<endl;;
    int st=-1,en=1e9+10;
    while (st+1<en)
    {
        int mid=(st+en)/2;
        if (check(mid))
            en=mid;
        else
            st=mid;
    }
    if (check(en)==0)
    {
        cout<<-1<<endl;
        return;
    }
    cout<<en<<endl;
    for (int i=0;i<n;i++)
        cout<<ans[i];
    cout<<endl;
}
signed main()
{
        ios_base::sync_with_stdio(false);cin.tie(NULL);cout.tie(NULL);
        int t=1;
        for (int i=1;i<=t;i++)
        {
                solve();
        }
}
컴파일 시 표준 에러 (stderr) 메시지
Main.cpp:11:2: warning: #warning check the output [-Wcpp]
   11 | #warning check the output
      |  ^~~~~~~| # | 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... |