#include <bits/stdc++.h>
#define int long long
using namespace std;
int n, m, q;
vector<int> k(m);
int binary(int x) {
int l =0, r = 2*m-1;
while (abs(l-r)>1) {
int m = l+(r-l)/2;
if (k[m]>x) {
r = m;
}
else l = m;
}
return r;
}
int mini(int c, int x, int y) {
int first = min(abs(x-c), 2*n-abs(x-c));
int vro = (c+n)%(2*n);
int second = min(abs(y-vro), 2*n-abs(y-vro));
return first+second+1;
}
signed main() {
cin >> n >> m >> q;
k.resize(m);
for (int i=0; i<m; i++) {
cin >> k[i];
k.push_back(k[i]+n);
}
sort(k.begin(), k.end());
for (int i=0; i<q; i++) {
int x, y; cin >> x >> y;
int without = min(abs(x-y), 2*n-abs(x-y));
int ind = binary(x);
int clo = k[ind], cli;
if (ind==0)
cli = k[2*m-1];
else cli = k[ind-1];
if(x>=k[2*m-1]|| x<=k[0]) {
clo = k[2*m-1];
cli = k[0];
}
int final = mini(clo, x, y);
int fin = mini(cli, x, y);
cout << min(min(final, fin), without) << endl;
}
}
# | 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... |