Submission #1147667

#TimeUsernameProblemLanguageResultExecution timeMemory
1147667samiaCircle Passing (EGOI24_circlepassing)C++20
100 / 100
840 ms133608 KiB
#include <bits/stdc++.h>
#include <iostream>
using namespace std;
using ll = long long ;
ll ri,ro;
vector<ll>v;
ll n,m,q;
ll bs(ll x){
    ll l,r;
    l=0;
    r=v.size()-1;
    ll c=0;
    if(x>v[r] or x<v[l]){ri=l; ro=r;}
    else{
    while(true){
  
        ri=l; ro=r;
        //  cout<<l<<" "<<r<<endl;
      
         c=(l+r+1)/2;
        if(x>v[c]){ l=c; }
      if(x<v[c]){r=c;}
         if(x==v[c]){ro=c;break;}
      if(r-l==1){ro=r; ri=l;break;}
     if( r-l<1){ break;}
    }
    }

return 0;
}


int main() {
 

cin>>n>>m>>q;
ll bestie=0;
ll b;
map<ll,ll>p;
map<ll,ll>s;



for(ll so=0;so<m;so++){
    cin>>bestie;
    b=(bestie+n)%(2*n);
 
        v.push_back(bestie);
       //  v.push_back(bestie+(2*n));
        v.push_back(b);
         //  v.push_back(b+(2*n));
  p[bestie]=b;
   p[b]=bestie;
s[bestie]=1;
    s[b]=1;
}

sort(v.begin(),v.end());


    ll x,y;
    ll ans=0;
    while(q--){
        cin>>x>>y;
       ans=min(abs(x-y),(2*n)-abs(x-y)); 
      bs(x);
      // cout<<v[ri]<<" "<<v[ro]<<" "<<endl;
      // bs(x+2*n);
       
     
          
ans=min(ans,min((2*n)-abs(x-v[ro]),abs(x-v[ro]))+1+min((2*n)-abs(y-p[v[ro]]),abs(y-p[v[ro]])));

 ans=min(ans,min((2*n)-abs(x-v[ri]),abs(x-v[ri]))+1+min((2*n)-abs(y-p[v[ri]]),abs(y-p[v[ri]])));
      
      cout<<ans<<endl;
    }






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