Submission #1140593

#TimeUsernameProblemLanguageResultExecution timeMemory
1140593UmairAhmadMirzaSprinklers (CEOI24_sprinklers)C++20
100 / 100
145 ms21384 KiB
#include <bits/stdc++.h> using namespace std; #define int long long int const N=2e5+5; int const mod=1e9+7; int n,m; vector<int> flo,spr,rspr; vector<pair<int,int>> pr; vector<int> d; bool solve1(int K){ deque<int> bh_flo; int cur=-(1e9+5); // vector<int> d; d.clear(); vector<int> lst; reverse(pr.begin(), pr.end()); int sz=0; for(auto [p,t]:pr){ p*=-1; if(t==0){ sz++; while(bh_flo.size()>0 && bh_flo[0]<=cur) bh_flo.pop_front(); if(bh_flo.size()==0){ d.push_back(1); lst.push_back(p); cur=p+K; continue; } if(bh_flo[0]<p-K){ reverse(pr.begin(), pr.end()); return 0; } d.push_back(0); if(d.size()>2 && rspr[sz-2]>=p-K && rspr[sz-3]>=p-K){ d[sz-2]=1; cur=rspr[sz-2]+K; lst.push_back(lst.back()); while(bh_flo.size()>0 && bh_flo[0]<=cur) bh_flo.pop_front(); } else if(d.size()>1 && rspr[sz-2]>=p-K){ if(lst.back()>=p-K){ lst.push_back(lst.back()); d[sz-2]=1; cur=rspr[sz-2]+K; while(bh_flo.size()>0 && bh_flo[0]<=cur) bh_flo.pop_front(); } else lst.push_back(bh_flo[0]); } else lst.push_back(bh_flo[0]); bh_flo.clear(); } else{ if(p>cur) bh_flo.push_back(p); } } reverse(pr.begin(), pr.end()); if(bh_flo.size()>0 && bh_flo.back()>cur) return 0; return 1; } bool solve(int K){ deque<int> bh_flo; int cur=-1; // vector<int> d; d.clear(); vector<int> lst; int sz=0; for(auto [p,t]:pr){ if(t==0){ sz++; while(bh_flo.size()>0 && bh_flo[0]<=cur) bh_flo.pop_front(); if(bh_flo.size()==0){ d.push_back(1); lst.push_back(p); cur=p+K; continue; } if(bh_flo[0]<p-K) return 0; d.push_back(0); if(d.size()>2 && spr[sz-2]>=p-K && spr[sz-3]>=p-K){ d[sz-2]=1; cur=spr[sz-2]+K; lst.push_back(lst.back()); while(bh_flo.size()>0 && bh_flo[0]<=cur) bh_flo.pop_front(); } else if(d.size()>1 && spr[sz-2]>=p-K){ if(lst.back()>=p-K){ lst.push_back(lst.back()); d[sz-2]=1; cur=spr[sz-2]+K; while(bh_flo.size()>0 && bh_flo[0]<=cur) bh_flo.pop_front(); } else lst.push_back(bh_flo[0]); } else lst.push_back(bh_flo[0]); bh_flo.clear(); } else{ if(p>cur) bh_flo.push_back(p); } } if(bh_flo.size()>0 && bh_flo.back()>cur) return 0; return 1; } signed main(){ cin>>n>>m; map<int,int> mp; for (int i = 0; i < n; ++i) { int a; cin>>a; spr.push_back(a); rspr.push_back(-a); pr.push_back({a,0}); mp[a]=1; } for (int i = 0; i < m; ++i) { int a; cin>>a; if(mp[a]) continue; flo.push_back(a); pr.push_back({a,1}); } // rspr=spr/; reverse(rspr.begin(), rspr.end()); sort(pr.begin(), pr.end()); int low=-1,high=1e9+1; while(high-low>1){ int mid=(high+low)/2; if(solve(mid) || solve1(mid)) high=mid; else low=mid; } if(high==1e9+1) cout<<-1<<endl; else{ cout<<high<<endl; if(solve1(high)){ reverse(d.begin(), d.end()); for(int i:d){ if(i==1) cout<<'L'; else cout<<'R'; } cout<<endl; return 0; } solve(high); // cout<<high<<endl; for(int i:d){ if(i==1) cout<<'R'; else cout<<'L'; } cout<<endl; } return 0; }
#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...