Submission #1037274

#TimeUsernameProblemLanguageResultExecution timeMemory
103727412345678Sprinklers (CEOI24_sprinklers)C++17
100 / 100
130 ms17416 KiB
#include <bits/stdc++.h>

using namespace std;

const int nx=1e5+5, mx=1e9+5, kx=10, bx=3;

int n, m, s[nx], f[nx], dr[nx], rv[nx][kx], l=0, r=1e9+5;
pair<int, int> dp[nx][kx];

bool solve(int x)
{
    for (int i=1; i<=n; i++) dr[i]=0;
    vector<int> vs(n+1), p, w;
    vector<pair<int, int>> range;
    p.push_back(0);
    for (int i=4; i<=n; i++)
    {
        if (!range.empty()&&range.back().second>=s[i]-1) vs[i]=1, range.back().second=s[i]+x;
        else if (s[i]-s[i-3]<=x) dr[i-3]=dr[i-1]=1, vs[i-3]=vs[i-2]=vs[i-1]=vs[i]=1, range.push_back({s[i-3]-x, s[i]+x});
    }
    for (int i=1; i<=n; i++) if (!vs[i]) p.push_back(i);
    int idx=0;
    for (int i=1; i<=m; i++)
    {
        while (idx<range.size()&&f[i]>range[idx].second) idx++;
        if (range.empty()||f[i]<range[idx].first||f[i]>range[idx].second) w.push_back(i);
    }
    w.push_back(m+1);
    vector<int> nxt(p.size()), nxtl(p.size());
    idx=0;
    for (int i=0; i<p.size(); i++)
    {
        while (f[w[idx]]<=s[p[i]]) idx++;
        nxt[i]=idx;
    }
    idx=0;
    for (int i=0; i<p.size(); i++)
    {
        while (f[w[idx]]<=s[p[i]]+x) idx++;
        nxtl[i]=idx;
    }
    if (p.size()==1) return (w.size()==1);
    for (int i=0; i<(1<<bx); i++) dp[0][i]={0, 0};
    for (int i=1; i<p.size(); i++)
    {
        for (int msk=0; msk<(1<<bx); msk++)
        {
            int a=msk/2, b=msk/2+(1<<(bx-1));
            if (dp[i-1][a].first<dp[i-1][b].first) swap(a, b);
            int loc=f[w[dp[i-1][a].first]];
            rv[i][msk]=a;
            if (msk&1)
            {
                if (loc>=s[p[i]]-x&&loc<=s[p[i]]) dp[i][msk]={max(dp[i-1][a].second, nxt[i]), max(dp[i-1][a].second, nxt[i])};
                else dp[i][msk]=dp[i-1][a];
            }
            else
            {
                if (loc>=s[p[i]]) dp[i][msk]={nxtl[i], nxtl[i]};
                else dp[i][msk]={dp[i-1][a].first, nxtl[i]};
            }
        }
    }
    for (int i=0; i<(1<<bx); i++) 
    {
        if (dp[p.size()-1][i].first==w.size()-1) 
        {
            int cur=i;
            for (int j=p.size()-1; j>0; j--) dr[p[j]]=cur%2, cur=rv[j][cur];
            return 1;
        }
    }
    return 0;
}

int main()
{
    cin.tie(NULL)->sync_with_stdio(false);
    cin>>n>>m;
    for (int i=1; i<=n; i++) cin>>s[i];
    for (int i=1; i<=m; i++) cin>>f[i];
    s[0]=-2e9;
    f[m+1]=INT_MAX;
    while (l<r)
    {
        int md=(l+r)/2;
        if (solve(md)) r=md;
        else l=md+1;
    }
    if (l==mx) return cout<<-1, 0;
    solve(l);
    cout<<l<<'\n';
    for (int i=1; i<=n; i++) cout<<(dr[i]?'L':'R');
}

Compilation message (stderr)

Main.cpp: In function 'bool solve(int)':
Main.cpp:25:19: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<int, int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   25 |         while (idx<range.size()&&f[i]>range[idx].second) idx++;
      |                ~~~^~~~~~~~~~~~~
Main.cpp:31:20: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   31 |     for (int i=0; i<p.size(); i++)
      |                   ~^~~~~~~~~
Main.cpp:37:20: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   37 |     for (int i=0; i<p.size(); i++)
      |                   ~^~~~~~~~~
Main.cpp:44:20: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   44 |     for (int i=1; i<p.size(); i++)
      |                   ~^~~~~~~~~
Main.cpp:66:36: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   66 |         if (dp[p.size()-1][i].first==w.size()-1)
      |             ~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~
#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...