#include <bits/stdc++.h>
using namespace std;
#define int long long
int const N=2e5+5;
int const mod=1e9+7;
int n,m;
vector<int> flo,spr,rspr;
vector<pair<int,int>> pr;
vector<int> d;
bool solve1(int K){
deque<int> bh_flo;
int cur=-(1e9+5);
// vector<int> d;
d.clear();
vector<int> lst;
reverse(pr.begin(), pr.end());
int sz=0;
for(auto [p,t]:pr){
p*=-1;
if(t==0){
sz++;
while(bh_flo.size()>0 && bh_flo[0]<=cur)
bh_flo.pop_front();
if(bh_flo.size()==0){
d.push_back(1);
lst.push_back(p);
cur=p+K;
continue;
}
if(bh_flo[0]<p-K){
reverse(pr.begin(), pr.end());
return 0;
}
d.push_back(0);
if(d.size()>2 && rspr[sz-2]>=p-K && rspr[sz-3]>=p-K){
d[sz-2]=1;
cur=rspr[sz-2]+K;
lst.push_back(lst.back());
while(bh_flo.size()>0 && bh_flo[0]<=cur)
bh_flo.pop_front();
}
else if(d.size()>1 && rspr[sz-2]>=p-K){
if(lst.back()>=p-K){
lst.push_back(lst.back());
d[sz-2]=1;
cur=rspr[sz-2]+K;
while(bh_flo.size()>0 && bh_flo[0]<=cur)
bh_flo.pop_front();
}
else
lst.push_back(bh_flo[0]);
}
else
lst.push_back(bh_flo[0]);
bh_flo.clear();
}
else{
if(p>cur)
bh_flo.push_back(p);
}
}
reverse(pr.begin(), pr.end());
if(bh_flo.size()>0 && bh_flo.back()>cur)
return 0;
return 1;
}
bool solve(int K){
deque<int> bh_flo;
int cur=-1;
// vector<int> d;
d.clear();
vector<int> lst;
int sz=0;
for(auto [p,t]:pr){
if(t==0){
sz++;
while(bh_flo.size()>0 && bh_flo[0]<=cur)
bh_flo.pop_front();
if(bh_flo.size()==0){
d.push_back(1);
lst.push_back(p);
cur=p+K;
continue;
}
if(bh_flo[0]<p-K)
return 0;
d.push_back(0);
if(d.size()>2 && spr[sz-2]>=p-K && spr[sz-3]>=p-K){
d[sz-2]=1;
cur=spr[sz-2]+K;
lst.push_back(lst.back());
while(bh_flo.size()>0 && bh_flo[0]<=cur)
bh_flo.pop_front();
}
else if(d.size()>1 && spr[sz-2]>=p-K){
if(lst.back()>=p-K){
lst.push_back(lst.back());
d[sz-2]=1;
cur=spr[sz-2]+K;
while(bh_flo.size()>0 && bh_flo[0]<=cur)
bh_flo.pop_front();
}
else
lst.push_back(bh_flo[0]);
}
else
lst.push_back(bh_flo[0]);
bh_flo.clear();
}
else{
if(p>cur)
bh_flo.push_back(p);
}
}
if(bh_flo.size()>0 && bh_flo.back()>cur)
return 0;
return 1;
}
signed main(){
cin>>n>>m;
map<int,int> mp;
for (int i = 0; i < n; ++i)
{
int a;
cin>>a;
spr.push_back(a);
rspr.push_back(-a);
pr.push_back({a,0});
mp[a]=1;
}
for (int i = 0; i < m; ++i)
{
int a;
cin>>a;
if(mp[a])
continue;
flo.push_back(a);
pr.push_back({a,1});
}
// rspr=spr/;
reverse(rspr.begin(), rspr.end());
sort(pr.begin(), pr.end());
int low=-1,high=1e9+1;
while(high-low>1){
int mid=(high+low)/2;
if(solve(mid) || solve1(mid))
high=mid;
else
low=mid;
}
if(high==1e9+1)
cout<<-1<<endl;
else{
cout<<high<<endl;
if(solve1(high)){
reverse(d.begin(), d.end());
for(int i:d){
if(i==1)
cout<<'L';
else
cout<<'R';
}
cout<<endl;
return 0;
}
solve(high);
// cout<<high<<endl;
for(int i:d){
if(i==1)
cout<<'R';
else
cout<<'L';
}
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... |