Submission #1165179

#TimeUsernameProblemLanguageResultExecution timeMemory
1165179Siddharth2EEEPictionary (COCI18_pictionary)C++20
140 / 140
124 ms6812 KiB
#include <bits/stdc++.h> #define lli long long int #define endl "\n" #define fastio() ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(__null); using namespace std; class DSU { public: int n; vector<int> par, sz; DSU(int m) { n = m; par.resize(n), sz.resize(n, 1); iota(par.begin(), par.end(), 0); } int find(int u) { if (par[u] == u) return u; return par[u] = find(par[u]); } void merge(int u, int v) { u = find(u), v = find(v); if (u == v) return; if (sz[v] > sz[u]) swap(u, v); par[v] = u, sz[u] += sz[v]; } }; signed main() { fastio() int n, m, q; cin >> n >> m >> q; vector<array<int, 2>> qr(q); for (auto &[a, b] : qr) cin >> a >> b; vector<int> lo(q, 1), hi(q, m), ans(q); for (int i = 1; i <= 17; i++) { vector<int> check[m + 1]; for (int i = 0; i < q; i++) if (lo[i] <= hi[i]) check[(lo[i] + hi[i]) / 2].push_back(i); DSU graph(n + 1); for (int j = 1; j <= m; j++) { int f = m - j + 1; for (int k = 2; k * f <= n; k++) graph.merge((k - 1) * f, k * f); for (auto &in : check[j]) { auto &[a, b] = qr[in]; if (graph.find(a) == graph.find(b)) ans[in] = j, hi[in] = j - 1; else lo[in] = j + 1; } } } for (auto &x : ans) cout << x << endl; return 0; }
#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...