#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 time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |