#include <bits/stdc++.h>
#define all(x) begin(x), end(x)
using namespace std;
using ll = long long;
const char nl = '\n', sp = ' ';
struct DSU {
int n;
vector<int> par, size;
DSU() {
}
DSU(int n) : n(n) {
par.assign(n, 0);
size.assign(n, 1);
iota(begin(par), end(par), 0);
}
int find(int v) {
return (v == par[v] ? v : par[v] = find(par[v]));
}
bool is_connected(int a, int b) {
return find(a) == find(b);
}
bool unite(int a, int b) {
a = find(a), b = find(b);
if (a == b) return false;
if (size[a] < size[b]) swap(a, b);
par[b] = a;
size[a] += size[b];
return true;
}
int sz(int v) {
return size[find(v)];
}
};
void solve() {
int n, m, q;
cin >> n >> m >> q;
vector<array<int, 2> > qs(q);
for (int i = 0; i < q; i++) {
cin >> qs[i][0] >> qs[i][1];
qs[i][0]--, qs[i][1]--;
}
vector<vector<array<int, 3> > > chk(m);
int mid = (m - 1) >> 1;
for (int i = 0; i < q; i++) {
chk[mid].push_back({0, m - 1, i});
}
vector<int> ans(q, -1);
for (int i = 0; i < 20; i++) {
DSU dsu(n);
for (int j = 0; j < m; j++) {
int val = m - j;
for (int k = 2 * val; k <= n; k += val) {
dsu.unite(k - val - 1, k - 1);
}
for (auto [l, r, idx]: chk[j]) {
auto [x, y] = qs[idx];
int _l, _r;
if (dsu.is_connected(x, y)) {
ans[idx] = j;
_l = l, _r = j - 1;
} else {
_l = j + 1, _r = r;
}
if (_l > _r) continue;
int nmid = (_l + _r) >> 1;
chk[nmid].push_back({_l, _r, idx});
}
vector<array<int, 3> >().swap(chk[j]);
}
}
for (auto &i: ans) cout << i + 1 << nl;
}
signed main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
cout.tie(nullptr);
int t = 1;
//cin >> t;
while (t--) {
solve();
}
}
# | 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... |
# | 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... |