#include<bits/stdc++.h>
#define debug(x) cerr << #x << " " << x << "\n"
#define debugs(x) cerr << #x << " " << x << " "
#pragma GCC optimize("Ofast")
#define int long long
using namespace std;
mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());
int range_rng(int l, int r)
{
return uniform_int_distribution<int>(l,r)(rng);
}
int s[100005];
int f[100005];
int dir[100005];
vector<int> ls,rs;
string bigmeeks;
int dp[100005];
int n,m;
bool ok(int k)
{
int i,r,pas,bound,last,j,furthest1,closest1,l;
bool oke;
string config;
dp[0]=0;
for (i=1; i<=n; i++)
{
dp[i]=-1e18;
///L
r=0;
pas=(1<<16);
while (pas)
{
if (r+pas<=m && f[r+pas]<s[i]-k)
r+=pas;
pas=pas/2;
}
if (r<=dp[i-1])
{
r=0;
pas=(1<<16);
while (pas)
{
if(r+pas<=m && f[r+pas]<=s[i])
r+=pas;
pas=pas/2;
}
if (r>dp[i])
{
dp[i]=r;
dir[i]=1;
}
}
///R
r=0;
pas=(1<<16);
while (pas)
{
if (r+pas<=m && f[r+pas]<s[i])
r+=pas;
pas=pas/2;
}
if (r<=dp[i-1])
{
r=0;
pas=(1<<16);
while (pas)
{
if (r+pas<=m && f[r+pas]<=s[i]+k)
r+=pas;
pas=pas/2;
}
if (r>dp[i])
{
dp[i]=r;
dir[i]=2;
}
}
///RL
if (i>=2)
{
r=0;
pas=(1<<16);
while (pas)
{
if (r+pas<=m && f[r+pas]<s[i]-k)
r+=pas;
pas=pas/2;
}
if (r<=dp[i-2])
{
r=0;
pas=(1<<16);
while (pas)
{
if (r+pas<=m && f[r+pas]<=s[i-1]+k)
r+=pas;
pas=pas/2;
}
if (r>dp[i])
{
dp[i]=r;
dir[i]=3;
}
}
}
if (dp[i]==-1e18)
return 0;
}
if (dp[n]!=m)
return 0;
config="";
j=n;
while (j!=0)
{
if (dir[j]==1)
{
config+='L';
j--;
}
else if (dir[j]==2)
{
config+='R';
j--;
}
else if (dir[i]==3)
{
config+="LR";
j-=2;
}
}
config+="$";
reverse(config.begin(),config.end());
ls.clear();
rs.clear();
for (i=1; i<=n; i++)
{
if (config[i]=='L')
ls.push_back(s[i]);
else
rs.push_back(s[i]);
}
oke=true;
for (i=1; i<=m; i++)
{
r=-1;
pas=(1<<16);
while (pas)
{
if (r+pas<rs.size() && rs[r+pas]<=f[i])
r+=pas;
pas=pas/2;
}
if (r==-1 || rs[r]+k<f[i])
{
r=-1;
pas=(1<<16);
while (pas)
{
if (r+pas<ls.size() && ls[r+pas]<f[i])
r+=pas;
pas=pas/2;
}
r++;
if (r>=ls.size() || ls[r]>f[i] && ls[r]-k>f[i] || ls[r]<f[i])
oke=false;
}
}
if (oke)
bigmeeks=config;
return oke;
}
signed main()
{
/*
ifstream fin("arbore.in");
ofstream fout("arbore.out");
*/
ios_base::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
int i,j,cnt,r,pas;
cin >> n >> m;
for (i=1; i<=n; i++)
cin >> s[i];
for (i=1; i<=m; i++)
cin >> f[i];
if (!ok(1e9))
{
cout << "-1";
}
else
{
r=0;
pas=(1<<30);
while(pas)
{
if (!ok(r+pas))
r+=pas;
pas=pas/2;
}
if (!ok(r))
r++;
ok(r);///stiu ca e cringe da na
cout << r << "\n";
for (i=1; i<=n; i++)
cout << bigmeeks[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... |