Submission #1280192

#TimeUsernameProblemLanguageResultExecution timeMemory
1280192khanhphucscratchSprinklers (CEOI24_sprinklers)C++20
26 / 100
187 ms8092 KiB
#include<bits/stdc++.h>
#define int long long
using namespace std;
string ansstr;
bool check(int x, vector<int> a, vector<int> b)
{
    int maximum = -1e9, lastval = -1e9; string curstr;
    vector<int> last_maximum = {maximum};
    for(int i : a){
        int p = lower_bound(b.begin(), b.end(), i) - b.begin();
        if(p == 0 || b[p-1] <= maximum){
            maximum = i + x; last_maximum.push_back(maximum);
            curstr += "R";
            continue;
        }
        p = upper_bound(b.begin(), b.end(), maximum) - b.begin();
        if(p < b.size() && b[p] < i - x) return 0;
        maximum = max(maximum, i); curstr += "L";
        //But sometimes, we could modify the element before that to R
        if(curstr.size() >= 2 && curstr[curstr.size()-2] == 'L'){
            p = lower_bound(b.begin(), b.end(), i-x) - b.begin();
            if(p == 0 || b[p-1] <= last_maximum[last_maximum.size()-2]){
                curstr[curstr.size()-2] = 'R';
                maximum = max(maximum, lastval + x);
            }
        }
        lastval = i; last_maximum.push_back(maximum);
    }
    if(maximum < b.back()) return 0;
    ansstr = curstr;
    return 1;
}
signed main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(0);
    int n, m;
    cin>>n>>m;
    vector<int> a(n), b;
    for(int i = 0; i < n; i++) cin>>a[i];
    for(int i = 0; i < m; i++){
        int x; cin>>x;
        if((b.size() == 0 || b.back() != x) && (x > a.back() || *lower_bound(a.begin(), a.end(), x) != x)) b.push_back(x);
    }
    if(b.size() == 0){
        cout<<0<<'\n';
        for(int i = 1; i <= n; i++) cout<<"L";
        return 0;
    }
    //cout<<check(1000, a, b);
    //return 0;
    int l = 0, r = 1e9, ans = -1;
    string str;
    while(l <= r){
        int mid = (l+r)/2;
        if(check(mid, a, b) == 1){ans = mid; r = mid-1;}
        else l = mid+1;
    }
    cout<<ans<<'\n';
    if(ans > -1) cout<<ansstr;
}

#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...