Submission #1147520

#TimeUsernameProblemLanguageResultExecution timeMemory
1147520orzdraiduwuCircle Passing (EGOI24_circlepassing)C++20
14 / 100
109 ms5972 KiB
#include <bits/stdc++.h>
#define int long long
using namespace std;

int n, m, q;
int dis(int x, int y) { return min(abs(x-y), 2*n - abs(x-y)); }
signed main() {
  cin >> n >> m >> q;
  vector<int> k(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 a = min(abs(x-y), abs(min(x, y)) + abs(y-2*n));
    int a = dis(x, y);
    int l = 0, r = k.size();
    while(r - l > 1) {
      int md = (l+r)/2;
      if(k[md] >= x) r = md;
      else l = md;
    }

    // else {
    //   l = 
    // }

    int w = k[l];
    int b = dis(x, w);
    w += n;
    w %= 2*n;
    b += dis(w, y);
    int e = k[r];
    int c = dis(x, e);
    e += n;
    e %= 2*n;
    c += dis(e, y);
    b++; c++;
    // cout << endl;
    // cout << a << " " << b << " " << c << endl;
    cout << min({a, b, c}) << 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...