Submission #877659

#TimeUsernameProblemLanguageResultExecution timeMemory
877659noiaintPictionary (COCI18_pictionary)C++17
140 / 140
37 ms10916 KiB
#include <bits/stdc++.h> using namespace std; #ifdef LOCAL #include "debug.h" #else #define debug(...) 42 #endif #define file "" #define mp make_pair #define fi first #define se second #define all(x) x.begin(), x.end() #define bit(x) (1LL << (x)) #define getbit(x, i) (((x) >> (i)) & 1) #define popcount __builtin_popcountll mt19937_64 rd(chrono::steady_clock::now().time_since_epoch().count()); int rand(int l, int r) { return l + rd() % (r - l + 1); } const int N = 1e6 + 5; const int mod = (int)1e9 + 7; // 998244353; const int lg = 25; // lg + 1 const int oo = 1e9; const long long ooo = 1e18; template<class X, class Y> bool mini(X &a, Y b) { return a > b ? (a = b, true) : false; } template<class X, class Y> bool maxi(X &a, Y b) { return a < b ? (a = b, true) : false; } void add(int &a, int b) { a += b; if (a >= mod) a -= mod; if (a < 0) a += mod; } int n, m, q; int par[N], w[N], moment[N]; int getpar(int x) { return x == par[x] ? x : getpar(par[x]); } bool unite(int x, int y, int t) { x = getpar(x); y = getpar(y); if (x == y) return false; if (w[x] < w[y]) swap(x, y); par[y] = x; w[x] += w[y]; moment[y] = t; return true; } void addEdge(int id) { int k = m - id + 1; for (int i = k + k; i <= n; i += k) unite(i, k, id); } void process() { cin >> n >> m >> q; for (int i = 1; i <= n; ++i) { par[i] = i; w[i] = 1; moment[i] = oo; } for (int i = 1; i <= m; ++i) addEdge(i); while (q--) { int x, y; cin >> x >> y; int res = 0; while (x != y) { if (moment[x] > moment[y]) swap(x, y); res = max(res, moment[x]); x = par[x]; } cout << res << '\n'; } } int main() { ios::sync_with_stdio(false); cin.tie(0); // freopen(file".inp", "r", stdin); // freopen(file".out", "w", stdout); int tc = 1; // cin >> tc; while (tc--) { process(); } 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...