Submission #1066071

#TimeUsernameProblemLanguageResultExecution timeMemory
1066071NemanjaSo2005Growing Vegetables is Fun 5 (JOI24_vegetables5)C++17
37 / 100
2519 ms19744 KiB
#include<bits/stdc++.h>
#define ll long long
#define f first
#define s second
using namespace std;
const int maxn=3e5+5;
int N,niz[2*maxn],R[maxn],B[maxn],pref[2*maxn];
int S;
pair<int,int> inter1(int x){
   int dg,gg,l=N+1,r=0,sred;
   dg=1;
   gg=N;
   while(dg<=gg){
      sred=(dg+gg)/2;
      if(x-S>niz[sred]){
         dg=sred+1;
      }
      else if(x+S<niz[sred]){
         gg=sred-1;
      }
      else{
         l=sred;
         gg=sred-1;
      }
   }
   dg=1;
   gg=N;
   while(dg<=gg){
      sred=(dg+gg)/2;
      if(x-S>niz[sred]){
         dg=sred+1;
      }
      else if(x+S<niz[sred]){
         gg=sred-1;
      }
      else{
         r=sred;
         dg=sred+1;
      }
   }
   return {l,r};
}
pair<int,int> inter2(int x){
   int dg,gg,l=2*N+1,r=0,sred;
   dg=N+1;
   gg=2*N;
   while(dg<=gg){
      sred=(dg+gg)/2;
      if(x+S<niz[sred]){
         dg=sred+1;
      }
      else if(x-S>niz[sred]){
         gg=sred-1;
      }
      else{
         l=sred;
         gg=sred-1;
      }
   }
   dg=N+1;
   gg=2*N;
   while(dg<=gg){
      sred=(dg+gg)/2;
      if(x+S<niz[sred]){
         dg=sred+1;
      }
      else if(x-S>niz[sred]){
         gg=sred-1;
      }
      else{
         r=sred;
         dg=sred+1;
      }
   }
   return {l,r};
}
bool moze(int sred){
   memset(pref,0,sizeof(pref));
   S=sred;
   /// R, koji ce biti u onih N
   for(int i=1;i<=N;i++){
      auto a = inter1(R[i]);
      if(a.f<=a.s){
         pref[max(1,a.f-i+1)]++;
         pref[max(1,a.s-i+1+1)]--;
      }
      int poz=2*N-i+1;
      if(R[i]-S<=niz[poz] and R[i]+S>=niz[poz]){
         pref[poz-N+1]++;
      }
   }
   /// B, ostali
   for(int i=1;i<=N;i++){
      if(B[i]-S<=niz[i] and B[i]+S>=niz[i])
         pref[i+1]++;
      auto b=inter2(B[i]);
      if(b.f<=b.s){
         pref[max(1,i-(2*N-b.f+1)+1)]++;
         pref[max(1,i-(2*N-b.s+1)+1+1)]--;
      }
   }
   int v=0;
   for(int i=1;i<=N;i++){
      v+=pref[i];
      if(v==2*N)
         return true;
   }
   return false;
}
int resi(){
   int dg=0,gg=1e9,sred,ret;
   while(dg<=gg){
      sred=(dg+gg)/2;
      if(moze(sred)){
         ret=sred;
         gg=sred-1;
      }
      else
         dg=sred+1;
   }
   return ret;
}
int main(){
   ios_base::sync_with_stdio(false);
   cin.tie(0);
   cin>>N;
   for(int i=1;i<=2*N;i++)
      cin>>niz[i];
   for(int i=1;i<=N;i++)
      cin>>R[i];
   for(int i=1;i<=N;i++)
      cin>>B[i];
   sort(R+1,R+1+N);
   sort(B+1,B+1+N);
   int res=resi();
   for(int i=1;i<=N;i++)
      swap(R[i],B[i]);
   res=min(res,resi());
   cout<<res<<"\n";
}

Compilation message (stderr)

Main.cpp: In function 'int resi()':
Main.cpp:121:11: warning: 'ret' may be used uninitialized in this function [-Wmaybe-uninitialized]
  121 |    return ret;
      |           ^~~
#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...