Submission #1147668

#TimeUsernameProblemLanguageResultExecution timeMemory
1147668FZ_LaabidiCircle Passing (EGOI24_circlepassing)C++20
14 / 100
108 ms5984 KiB
#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<k.size(); i++)cout << k[i]<< " ";
  //  cout << endl;
    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];
        int final = mini(clo, x, y);
        int fin = mini(cli, x, y);
      //  cout << cli << " "<< clo << " "<< ind << " "<< final << " "<< fin << " "<< without << endl;
        cout << min(min(final, fin), without) << 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...