Submission #714157

#TimeUsernameProblemLanguageResultExecution timeMemory
714157ThiagoSDQPictionary (COCI18_pictionary)C++14
140 / 140
67 ms3284 KiB
#include <bits/stdc++.h> #define mp make_pair #define fi first #define se second using namespace std; int n, m, q; int anc[100010]; int tim[100010]; int w[100010]; int find(int x, int t){ if(anc[x] == x) return x; if(tim[x] > t) return x; return find(anc[x], t); } void join(int x, int y, int t){ x = find(x, t); y = find(y, t); if(x == y) return; if(w[x] < w[y]) swap(x, y); w[x] += w[y]; anc[y] = x; tim[y] = t; } int main(){ ios::sync_with_stdio(false); cin.tie(0); cin >> n >> m >> q; for(int i=1; i<=n; i++){ anc[i] = i; w[i] = 1; } for(int i=m; i>=1; i--){ for(int j=2*i; j<=n; j+=i){ join(i, j, m-(i-1)); } } for(int i=0; i<q; i++){ int a, b; cin >> a >> b; int l = 1, r = m; while(l < r){ int mid = (l+r)/2; if(find(a, mid) == find(b, mid)){ r = mid; } else { l = mid+1; } } cout << r << "\n"; } }
#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...