Submission #1280198

#TimeUsernameProblemLanguageResultExecution timeMemory
1280198khanhphucscratchSprinklers (CEOI24_sprinklers)C++20
100 / 100
185 ms8096 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}; bool last_support = 0; 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'; if(last_support == 1) curstr[curstr.size()-3] = 'L'; maximum = max(maximum, lastval + x); last_support = 1; } else last_support = 0; } else last_support = 0; 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...