Submission #1267098

#TimeUsernameProblemLanguageResultExecution timeMemory
1267098rayan_bdPictionary (COCI18_pictionary)C++20
126 / 140
460 ms74840 KiB
#include <bits/stdc++.h> using namespace std; const int mxN = 1e5 + 10; set<int> v[mxN]; vector<int> point[mxN]; int sz[mxN], par[mxN], query[mxN][2], st[mxN], en[mxN], ans[mxN]; int find(int u){ if(par[u] == u) return u; return par[u] = find(par[u]); } void unite(int u, int v){ u = find(u), v = find(v); if(u ^ v){ if(sz[u] > sz[v]) sz[u] += sz[v], par[v] = u; else sz[v] += sz[u], par[u] = v; } } signed main(){ ios_base::sync_with_stdio(0); cin.tie(nullptr); cout.tie(nullptr); int n, m, q; cin >> n >> m >> q; for(int i = 1; i <= m; ++i){ for(int j = i; j <= n; j += i){ if(v[i + 1].find(j) == v[i + 1].end()){ v[i].insert(j); } } } for(int i = 0; i < q; ++i){ cin >> query[i][0] >> query[i][1]; st[i] = 1, en[i] = m, ans[i] = 1e9; point[(en[i] + st[i]) / 2].push_back(i); } // 3 6 // 2 4,6, 8 for(int i = 0; i < 19; ++i){ for(int j = 1; j <= n; ++j){ par[j] = j, sz[j] = 1; } for(int j = m; j >= 1; --j){ int fi = -1; for(auto k : v[j]){ if(fi != -1) unite(fi, k); else fi = k; } for(auto it : point[j]){ if(find(query[it][0]) == find(query[it][1])){ st[it] = j + 1; ans[it] = min(ans[it], m - j + 1); }else{ en[it] = j - 1; } } point[j].clear(); } for(int j = 0; j < q; ++j){ if(st[j] <= en[j]){ point[(en[j] + st[j]) / 2].push_back(j); } } } for(int i = 0; i < q; ++i) cout << ans[i] << "\n"; 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...