제출 #1157226

#제출 시각아이디문제언어결과실행 시간메모리
1157226arwakhattabPictionary (COCI18_pictionary)C++20
140 / 140
125 ms9156 KiB
#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 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...
#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...