题目
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int INF=0x3f3f3f3f,N=2e6+5;
int n,m,q,k[N*4];
int Binary_search(int x){
int l=1,r=(m>>2),ret=(m>>2)+1;
while(l<=r){
int mid=(l+r)>>1;
if(k[mid]<=x) ret=min(ret,mid),l=mid+1;
else r=mid-1;
}
return ret;
}
int realy(int x){return (x-1)%(n<<1)+1;}
int round(int x,int y){return min(abs(x-y),(n<<1)-abs(x-y));}
int straight(int x,int y){
int address=Binary_search(x);
int left=INF,right=INF;
if(address<=m){
int* a; a=&k[address];
left=round(x,realy(*a))+round(realy(*a+n),y);
}
if(address>1){
int* b; b=&k[address-1];
right=round(x,realy(*b))+round(realy(*b+n),y);
}
return min(right,left)+1;
}
int distance(int x,int y){return min(round(x,y),straight(x,y));}
signed main(){
ios::sync_with_stdio(false); cin.tie(nullptr);
cin>>n>>m>>q;
for(int i=1;i<=m;i++) cin>>k[i],k[i+m]=++k[i]+n;
m<<=2;
for(int i=1;i<=m;i++) k[i+m]=k[i]+(n<<1);
m<<=2;
for(int i=1,x,y;i<=q;i++){
cin>>x>>y; x++; y++;
cout<<min(distance(x,y),distance(y,x))<<'\n';
}
return 0;
}