Submission #1197055

#TimeUsernameProblemLanguageResultExecution timeMemory
1197055veehjCircle Passing (EGOI24_circlepassing)C++20
31 / 100
141 ms8264 KiB
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
#define fi first
#define se second
#define pb push_back
#define sz(a) (ll) a.size()
#define all(x) (x).begin(), (x).end()
#define rep(i, a, b) for(ll i=a; i<b; i++)
#define rrep(i, a, b) for(ll i=a; i>=b; i--)
#define vl vector<ll>
#define vpll vector<pair<ll, ll>>
#define vvl vector<vector<ll>>
#define pll pair<ll, ll>
ll n, m, Q;
vl k;

ll dist(ll a, ll b){
  ll ret;
  if(a>b) ret=min(a-b, b+2*n-a);
  else ret=min(b-a, a+2*n-b);
  return ret;
}

void f() {
  cin >> n >> m >> Q;
  k.resize(m);
  rep(i, 0, m){
    cin >> k[i];
    k.pb(k[i]+n);
  }
  sort(all(k));
  rep(tc, 0, Q){
    ll a, b; cin >> a >> b;
    ll bridge=lower_bound(all(k), a)-k.begin(), ans=dist(a, b);
    if(bridge!=sz(k) && k[bridge]==a){
      ans=min(ans, dist((a+n)%(2*n), b)+1);
    } else {
      ans=min(ans, dist(a, k[bridge])+dist((k[bridge]+n)%(2*n), b)+1);
      bridge=(bridge-1+sz(k))%(sz(k));
      ans=min(ans, dist(a, k[bridge])+dist((k[bridge]+n)%(2*n), b)+1);
    }
    cout << ans << endl;
  }
}

int main() {
  int tc = 1;
  // cin >> tc;
  for (int i = 1; i <= tc; i++) {
    // cout << '#' << i << endl;
    f();
    cout << endl;
  }
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...