Submission #667510

#TimeUsernameProblemLanguageResultExecution timeMemory
667510tanprodiumSirni (COCI17_sirni)C++14
140 / 140
3112 ms574404 KiB
#include<bits/stdc++.h> #define fi first #define se second using namespace std; using pii = pair<int, int>; using ll = long long; const int N = 1e5; const int V = 1e7; int a[N + 5]; int par[N + 5]; int id[V + 5]; vector<int> cpr; vector<pii> e[V + 5]; int getpar(int u) { while (par[u] > 0) u = par[u]; return (u); } bool uni(int u, int v) { u = getpar(u), v = getpar(v); if (u == v) return (false); if (par[u] > par[v]) swap(u, v); par[u] += par[v]; par[v] = u; return (true); } void solve() { int n; cin >> n; for (int i = 1; i <= n; i++) { cin >> a[i]; cpr.push_back(a[i]); } sort(cpr.begin(), cpr.end()); cpr.resize(unique(cpr.begin(), cpr.end()) - cpr.begin()); n = (int)cpr.size(); vector<int> vec; for (int i = 1; i <= n; i++) { par[i] = -1; a[i] = cpr[i - 1]; id[a[i]] = i; vec.push_back(a[i]); } for (int i = 1; i <= n; i++) { int val = a[i]; int d = 1; while (true) { int take = max(val + 1, val * d);; auto iter = lower_bound(vec.begin(), vec.end(), take); if (iter == vec.end()) break; int nval = *iter; int j = id[nval]; int dist = nval % val; e[dist].push_back({i, j}); d = nval / val + 1; } } ll ans = 0; for (int i = 0; i <= V; i++) { for (pii x : e[i]) { int u = x.fi, v = x.se; if (uni(u, v)) ans += 1ll * i; } } cout << ans; } int main() { ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0); solve(); 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...