Submission #1268939

#TimeUsernameProblemLanguageResultExecution timeMemory
1268939cerqPictionary (COCI18_pictionary)C++20
140 / 140
83 ms35652 KiB
#include <bits/stdc++.h> #define FOD(i, a, b) for (int i = a; i <= b; ++i) #define fi first #define se second #define all(x) x.begin(), x.end() using namespace std; const int N = 3e6 + 1; const int mod = 1e9 + 7; const int inf = 1e9; int par[N], h[N], acs[N][20]; int cnt, weight[N]; vector <int> adj[N]; int n, m, q; int find_root(int u) { return(par[u] == u ? u : par[u] = find_root(par[u])); } void addEdge(int u, int v, int w) { u = find_root(u); v = find_root(v); if (u == v) return; cnt++; weight[cnt] = w; adj[cnt].push_back(u); adj[cnt].push_back(v); par[v] = par[u] = cnt; } void dfs(int u) { for (int v : adj[u]) { h[v] = h[u] + 1; acs[v][0] = u; dfs(v); } } int lca(int u, int v) { if (h[u] < h[v]) swap(u, v); int dec = h[u] - h[v]; for (int i = 18; ~i; --i) { if ((dec >> i) & 1) u = acs[u][i]; } if (u == v) return u; for (int i = 18; ~i; --i) { if (acs[u][i] != acs[v][i]) { u = acs[u][i]; v = acs[v][i]; } } return acs[u][0]; } main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); #define file(name) freopen(name".inp", "r", stdin); freopen(name".out", "w", stdout); cin >> n >> m >> q; for (int i = 1; i < N; ++i) par[i] = i; cnt = n; for (int i = m; i >= 1; --i) { for (int j = i + i; j <= n; j += i) { addEdge(i, j, m - i + 1); } } dfs(cnt); for (int j = 1; j <= 18; ++j) { for (int i = 1; i <= cnt; ++i) acs[i][j] = acs[acs[i][j - 1]][j - 1]; } while (q--) { int u, v; cin >> u >> v; cout << weight[lca(u, v)] << '\n'; } return 0; }

Compilation message (stderr)

pictionary.cpp:63:1: warning: ISO C++ forbids declaration of 'main' with no type [-Wreturn-type]
   63 | main()
      | ^~~~
#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...