Submission #1235992

#TimeUsernameProblemLanguageResultExecution timeMemory
1235992p4r4d0_xCircle Passing (EGOI24_circlepassing)C++20
100 / 100
55 ms12284 KiB
#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define pb push_back

void solve(){
    ll n, m, q; cin >> n >> m >> q;
    vector<ll> a(m), b(m);
    for(int i = 0; i < m; ++i){
        cin >> a[i];
        a.pb(n + a[i]);
    }
    sort(begin(a), end(a));
    while(q--){
        ll ans = 1e18;
        ll x, num2, y; cin >> x >> y;
        ll num1 = min(abs(x - y), 2 * n - abs(x - y));
        auto it = lower_bound(begin(a), end(a), x) - a.begin();
        ans = min(ans, num1);
        if(it < a.size() && it >= 0){
            it = a[it];
            num2 = min(2 * n - abs(x - it), abs(x - it));
            if(it < n)it += n;
            else it -= n;
            num2 += 1 + min(2 * n - abs(it - y), abs(it - y));
            ans = min(ans, num2);
        }
        it = lower_bound(begin(a), end(a), x) - a.begin() - 1;
        if(it >= 0 && it < a.size()){
            it = a[it];
            num1 = min(2 * n - abs(x - it), abs(x - it));
            if(it < n)it += n;
            else it -= n;
            num1 += 1 + min(2 * n - abs(it - y), abs(it - y));
            ans = min(ans, num1);
        }
        ll it1 = a[0];
        ll it2 = a.back();
        num1 = min(2 * n - abs(x - it1), abs(x - it1)) + 1;
        num2 = min(2 * n - abs(x - it2), abs(x - it2)) + 1;
        if(it1 < n)it1 += n;
        else it1 -= n;
        if(it2 < n)it2 += n;
        else it2 -= n;
        num1 += min(2  * n - abs(it1 - y), abs(it1 - y));
        num2 += min(2 * n - abs(it2 - y), abs(it2 - y));
        ans = min({ans, num1, num2});
        cout << ans << "\n";
    }
}


int main(){
    ios_base::sync_with_stdio(false);
    cin.tie(NULL), cout.tie(NULL);
    ll t = 1;
    //cin >> t;
    while(t--){
        solve();
    }
}
#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...