Submission #1139451

#TimeUsernameProblemLanguageResultExecution timeMemory
1139451vako_pPictionary (COCI18_pictionary)C++20
140 / 140
121 ms15400 KiB
#include <bits/stdc++.h> using namespace std; #define ll long long #define pb push_back const int mxN = 1e5 + 5; int n,m,q,ans[mxN],a[mxN],b[mxN],L[mxN],R[mxN]; vector<int> qq[mxN]; struct ds{ vector<int> rank,par; void init(){ rank.resize(mxN); par.resize(mxN); } void clear(){ for(int i = 0; i <= n; i++){ rank[i] = 0; par[i] = i; } } ll find(ll at){ if(par[at] == at) return at; par[at] = find(par[at]); return par[at]; } void merge(ll p1, ll p2){ p1 = find(p1); p2 = find(p2); if(p1 == p2) return; if(rank[p1] < rank[p2]) swap(p1, p2); par[p2] = p1; rank[p1] += (rank[p1] == rank[p2]); } }; int main(){ ios::sync_with_stdio(false); cin.tie(0); cout.tie(0); cin >> n >> m >> q; ds s; s.init(); for(int i = 0; i < q; i++){ cin >> a[i] >> b[i]; L[i] = 1; R[i] = m + 1; qq[1 + m / 2].pb(i); } for(int i1 = 0; i1 < 18; i1++){ s.clear(); for(int i = m; i >= 1; i--){ for(int j = i + i; j <= n; j += i) s.merge(i, j); for(auto it : qq[i]){ if(s.find(a[it]) == s.find(b[it])) L[it] = i; else R[it] = i; } qq[i].clear(); } for(int i = 0; i < q; i++){ if(R[i] - L[i] == 1) ans[i] = L[i]; else qq[L[i] + (R[i] - L[i]) / 2].pb(i); } } for(int i = 0; i < q; i++) cout << m - ans[i] + 1 << '\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...