Submission #1356623

#TimeUsernameProblemLanguageResultExecution timeMemory
1356623yyc000123Circle Passing (EGOI24_circlepassing)C++20
100 / 100
297 ms47520 KiB
#include<bits/stdc++.h>
using namespace std ;
typedef long long ll ;
const int N = 5e8+5 ;
const int M = 5e5+5 ;
const int Q = 2e4+5 ;
ll n , m , q ;
set<ll> st ;

ll dis(ll x , ll y){
    return min(2*n-abs(x-y),abs(x-y)) ;
}

int main(){
    ios::sync_with_stdio(0),cin.tie(0),cout.tie(0) ;
    cin >> n >> m >> q ;
    for(int i=0 ; i<m ; i++){
        int x ; cin >> x ;
        st.insert(x) ; st.insert(x+n) ;
    }
    while(q--){
        ll s , t ; cin >> s >> t ;
        ll ans = dis(s,t) ;
        if(s>t) swap(s,t) ;
        auto it = st.lower_bound(s) ;
        if(it!=st.end()) ans=min(ans,dis(s,*it)+dis((*it+n)%(2*n),t)+1) ;
        it = st.upper_bound(s) ;
        if(it!=st.begin()) it-- , ans=min(ans,dis(s,*it)+dis((*it+n)%(2*n),t)+1) ;
        it = st.lower_bound(t) ;
        if(it!=st.end()) ans=min(ans,dis(t,*it)+dis((*it+n)%(2*n),s)+1) ;
        it = st.upper_bound(t) ;
        if(it!=st.begin()) it-- , ans=min(ans,dis(t,*it)+dis((*it+n)%(2*n),s)+1) ;
        cout << ans << '\n' ;
    }
    return 0 ;
}
#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...