Submission #1322216

#TimeUsernameProblemLanguageResultExecution timeMemory
1322216reginoxPictionary (COCI18_pictionary)C++20
140 / 140
131 ms13800 KiB
#include <bits/stdc++.h> #define ll long long #define ld long double #define all(v) begin(v), end(v) #define pi pair<int, int> #define vi vector<int> using namespace std; struct DSU{ int n; vector<int> lab; DSU(int n){ this->n = n; lab.assign(n+1, -1); } void resize(int n){ this->n = n; lab.assign(n+1, -1); } int find(int u){ if(lab[u] < 0) return u; return lab[u] = find(lab[u]); } bool same(int u, int v){ return find(u) == find(v); } void join(int u, int v){ u = find(u), v = find(v); if(u == v) return; if(lab[u] > lab[v]) swap(u, v); lab[u] += lab[v]; lab[v] = u; } }; const int N = 1e5+3; int n, m, q, u[N], v[N], l[N], r[N], mid[N]; vector<int> o[N]; int main(){ ios_base::sync_with_stdio(0); cin.tie(0); cin >> n >> m >> q; for(int i = 1; i <= q; i++){ cin >> u[i] >> v[i]; l[i] = m, r[i] = 1; } DSU d(n); for(int LOOP = 17; LOOP; LOOP--){ for(int i = 1; i <= q; i++){ mid[i] = (l[i] + r[i])/2; o[mid[i]].push_back(i); } for(int i = m; i >= 1; i--){ for(int j = i; j <= n; j+=i) d.join(i, j); for(auto x:o[i]){ if(d.same(u[x], v[x])) r[x] = mid[x] + 1; else l[x] = mid[x] - 1; } o[i].clear(); } d.resize(n); } for(int i = 1; i <= q; i++) cout << m-(l[i]-1) << "\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...