#include <bits/stdc++.h>
using namespace std;
int n, m, q, x, y;
set<int> s;
int dist(int x, int y)
{
if (x>y) swap(x, y);
return min(y-x, 2*n-y+x);
}
int move(int x)
{
return (x+n)%(2*n);
}
int main()
{
cin.tie(NULL)->sync_with_stdio(false);
cin>>n>>m>>q;
for (int i=1; i<=m; i++) cin>>x, s.insert(x), s.insert(x+n);
while (q--)
{
cin>>x>>y;
int res=dist(x, y);
auto itr=s.lower_bound(x);
if (itr!=s.end()) res=min(res, dist(x, *itr)+1+dist(move(*itr), y));
else res=min(res, dist(x, *s.begin())+1+dist(move(*s.begin()), y));
if (itr!=s.begin()) res=min(res, dist(x, *prev(itr))+1+dist(move(*prev(itr)), y));
else res=min(res, dist(x, *prev(s.end()))+1+dist(move(*prev(s.end())), y));
cout<<res<<'\n';
}
}
# | 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... |