#include <bits/stdc++.h>
using namespace std;
#define forn(i,n) for(int i=0;i<int(n);i++)
#define forsn(i,s,n) for(int i=int(s);i<int(n);i++)
#define dforn(i,n) for(int i=int(n)-1;i>=0;i--)
#define dforsn(i,s,n) for(int i=int(n)-1;i>=int(s);i--)
#define fst first
#define snd second
#define pb push_back
#define eb emplace_back
#define sz(x) (int)x.size()
#define all(x) x.begin(), x.end()
typedef long long ll;
typedef vector<ll> vll;
typedef vector<int> vi;
typedef pair<int,int> ii;
int main(){
ios::sync_with_stdio(0);
cin.tie(0);
int n,m,q;
cin>>n>>m>>q;
vi k(2*m);
forn(i,m){
cin>>k[i];
k[i+m]=k[i]+n;
}
/*vi l(2*n),r(2*n);
l[0]=k.back()+n;
forsn(i,1,2*n){
if(b[i]) l[i]=i;
else l[i]=l[i-1];
}
r[2*n-1]=k.front();
dforn(i,2*n-1){
if(b[i]) r[i]=i;
else r[i]=r[i+1];
}*/
auto dist=[&](int x, int y){
int d=abs(x-y);
return min(d,2*n-d);
};
forn(_,q){
int x,y;
cin>>x>>y;
int ans=dist(x,y);
forn(t,2){
int lx,rx;
{
auto it=upper_bound(all(k),x);
if(it!=k.begin()) it--;
else it=prev(k.end());
lx=*it;
}
{
auto it=lower_bound(all(k),x);
if(it==k.end()) it=k.begin();
rx=*it;
}
ans=min(ans,dist(x,lx)+1+dist(y,(lx+n)%(2*n)));
ans=min(ans,dist(x,rx)+1+dist(y,(rx+n)%(2*n)));
swap(x,y);
}
cout<<ans<<'\n';
}
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... |