Submission #1140641

#TimeUsernameProblemLanguageResultExecution timeMemory
1140641Muhammad_AneeqSprinklers (CEOI24_sprinklers)C++20
26 / 100
529 ms1708 KiB
/*
بسم الله الرحمن الرحيم
Author:
                                                    (:Muhammad Aneeq:)
*/

#include <iostream>
#include <vector>
#include <algorithm>
#warning check the output
using namespace std;
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++)
    {
        if (ind==m)
        {
            ans[i]='R';
            continue;
        }
        int z=lower_bound(f,f+m,s[i])-f;
        if (z<=ind)
        {
            ans[i]='R';
            ind=upper_bound(f,f+m,s[i]+ran)-f;
        }
        else
        {
            if (i+1<n)
            {
                int l,r;
                l=upper_bound(f,f+m,s[i])-f;
                r=lower_bound(f,f+m,s[i+1])-f;
                if (l==r)
                {
                    ans[i]='L';
                    int f1=upper_bound(f,f+m,s[i])-f;
                    ind=max(ind,f1);
                }
                else
                {
                    if (s[i+1]-ran<=f[ind])
                    {
                        ans[i+1]='L';
                        ans[i]='R';
                        ind=upper_bound(f,f+m,s[i]+ran)-f;
                        i++;
                    }
                    else
                    {
                        ans[i]='L';
                        int f1=upper_bound(f,f+m,s[i])-f;
                        ind=max(ind,f1);
                    }
                }
            }
            else
                ans[i]='L';
        }
    }
    int dif[m+10]={};
    for (int i=0;i<n;i++)
    {
        if (ans[i]=='L')
        {
            int l=lower_bound(f,f+m,s[i]-ran)-f;
            int r=upper_bound(f,f+m,s[i])-f;
            dif[l]++;
            dif[r]--;
        }
        else
        {
            int l=lower_bound(f,f+m,s[i])-f;
            int r=upper_bound(f,f+m,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)
            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];
    for (int i=0;i<m;i++)
        cin>>f[i];
    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;
    }
    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;
}
int main()
{
        ios_base::sync_with_stdio(false);cin.tie(NULL);cout.tie(NULL);
        int t=1;
        for (int i=1;i<=t;i++)
        {
                solve();
        }
}

Compilation message (stderr)

Main.cpp:10:2: warning: #warning check the output [-Wcpp]
   10 | #warning check the output
      |  ^~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...