#include<bits/stdc++.h>
using namespace std;
int n, m, q;
int dist(int x, int y)
{
if(x < y) swap(x, y);
return min(2 * n - (x - y), x - y);
}
int dist2(int x, int y, int k1, int k2) {
return min(dist(x, k1) + dist(k2, y), dist(x, k2) + dist(k1, y)) + 1;
}
int main()
{
cin >> n >> m >> q;
int k[2 * m];
for(int i = 0; i < m; i ++)
cin >> k[i];
for(int i = 0; i < m; i ++)
k[i + m] = k[i] + n;
while(q--)
{
int x, y;
cin >> x >> y;
int ans = dist(x, y);
if(x > y) swap(x, y);
// x <= y
ans = min(ans, dist2(x, y, k[m - 1], k[m - 1] + n));
ans = min(ans, dist2(x, y, k[0], k[0] + n));
auto it = lower_bound(k, k + 2 * m, x);
if(it != k + 2 * m)
{
int idx = it - k;
ans = min(ans, dist2(x, y, k[idx], (k[idx] + n) % (2 * n)));
}
if(it != k)
{
it--;
int idx = it - k;
ans = min(ans, dist2(x, y, k[idx], (k[idx] + n) % (2*n)));
}
cout << ans << endl;
}
return 0;
}
# | 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... |