Submission #1359822

#TimeUsernameProblemLanguageResultExecution timeMemory
1359822NewtonabcCircle Passing (EGOI24_circlepassing)C++20
100 / 100
119 ms2676 KiB
#include<bits/stdc++.h>
using namespace std;
int n;
int dist(int u,int v){
    if(u>v) swap(u,v);
    return min(abs(u-v),u+2*n-v);
}
int main(){
    vector<int> vt;
    int m,q; cin>>n >>m >>q;
    for(int i=0;i<m;i++){
        int x; cin>>x;
        vt.push_back(x);
    }
    while(q--){
        int u,v; cin>>u >>v;
        if(u>v) swap(u,v);
        int ans=dist(u,v),cd;
        //cout<<ans <<" ";
        auto it=upper_bound(vt.begin(),vt.end(),u);
        if(!vt.empty()){
            if(it==vt.begin()) it=vt.end();
            it--;
            if((*it)<n){
                cd=dist(u,*it)+dist(v,(*it)+n)+1,ans=min(ans,cd);
                swap(u,v);
                cd=dist(u,*it)+dist(v,(*it)+n)+1,ans=min(ans,cd);
                swap(u,v);
            }
        }
        it=lower_bound(vt.begin(),vt.end(),u);
        if(!vt.empty()){
            if(it==vt.end()) it=vt.begin();
            if((*it)<n){
                cd=dist(u,*it)+dist(v,(*it)+n)+1,ans=min(ans,cd);
                swap(u,v);
                cd=dist(u,*it)+dist(v,(*it)+n)+1,ans=min(ans,cd);
                swap(u,v);
            }
        }
        cout<<ans <<"\n";
    }
}
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...