Submission #1125889

#TimeUsernameProblemLanguageResultExecution timeMemory
1125889emptypringlescanSprinklers (CEOI24_sprinklers)C++17
100 / 100
127 ms4468 KiB
#include <bits/stdc++.h> using namespace std; int32_t main(){ ios::sync_with_stdio(0); cin.tie(0); int n,m; cin >> n >> m; long long arr[n],brr[m]; for(int i=0; i<n; i++) cin >> arr[i]; for(int i=0; i<m; i++) cin >> brr[i]; long long lo=0,hi=1e9+5,mid; while(lo<hi){ mid=(lo+hi)/2; pair<int,int> l[n+1],r[n+1]; int c1=0,c2=-1,c3=0,c4=-1; for(int i=0; i<n; i++){ while(c1<m&&brr[c1]<arr[i]-mid) c1++; while(c2+1<m&&brr[c2+1]<=arr[i]) c2++; while(c3<m&&brr[c3]<arr[i]) c3++; while(c4+1<m&&brr[c4+1]<=arr[i]+mid) c4++; l[i+1]={c1,c2}; r[i+1]={c3,c4}; } int dp[n+1]; memset(dp,-1,sizeof(dp)); for(int i=1; i<=n; i++){ //R if(dp[i-1]+1>=r[i].first) dp[i]=max(dp[i],r[i].second); //L in general if(dp[i-1]+1>=l[i].first) dp[i]=max(dp[i],l[i].second); //RL if(i>1&&dp[i-2]+1>=l[i].first) dp[i]=max(dp[i],r[i-1].second); } if(dp[n]>=m-1) hi=mid; else lo=mid+1; } if(lo>1e9){ cout << -1; return 0; } cout << lo << '\n'; mid=lo; pair<int,int> l[n+1],r[n+1]; int c1=0,c2=-1,c3=0,c4=-1; for(int i=0; i<n; i++){ while(c1<m&&brr[c1]<arr[i]-mid) c1++; while(c2+1<m&&brr[c2+1]<=arr[i]) c2++; while(c3<m&&brr[c3]<arr[i]) c3++; while(c4+1<m&&brr[c4+1]<=arr[i]+mid) c4++; l[i+1]={c1,c2}; r[i+1]={c3,c4}; } int dp[n+1],st[n+1]; memset(dp,-1,sizeof(dp)); for(int i=1; i<=n; i++){ //R if(dp[i-1]+1>=r[i].first&&dp[i]<r[i].second){ dp[i]=r[i].second; st[i]=1; } //L in general if(dp[i-1]+1>=l[i].first&&dp[i]<l[i].second){ dp[i]=l[i].second; st[i]=2; } //RL if(i>1&&dp[i-2]+1>=l[i].first&&dp[i]<r[i-1].second){ dp[i]=r[i-1].second; st[i]=3; } } char ans[n+1]; int cur=n; while(cur>=1){ if(st[cur]==1){ ans[cur]='R'; cur--; } else if(st[cur]==2){ ans[cur]='L'; cur--; } else{ ans[cur]='L'; ans[cur-1]='R'; cur-=2; } } for(int i=1; i<=n; i++) cout << ans[i]; }
#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...