#include <bits/stdc++.h>
using namespace std;
int f[10000005];
vector<pair<int, int>> edge[10000005];
struct DSU{
int p[100005];
void init(int n){
for(int i = 1; i <= n; i++) p[i] = i;
}
int find(int u){
return (p[u] == u ? u : p[u] = find(p[u]));
}
bool unon(int u, int v){
u = find(u);
v = find(v);
if(u == v) return false;
p[v] = u;
return true;
}
} dsu;
void solve(){
int n; cin >> n;
vector<int> a(n + 1);
for(int i = 1; i <= n; i++) cin >> a[i];
sort(a.begin(), a.end());
a.erase(unique(a.begin(), a.end()), a.end());
for(int i = 1; i < a.size(); i++) f[a[i]] = i;
for(int i = a.back() - 1; i >= 1; i--) if(f[i] == 0) f[i] = f[i + 1];
dsu.init(n);
for(int i = 1; i < a.size() - 1; i++){
edge[a[i + 1] % a[i]].push_back({i, i + 1});
for(int j = a[i] * 2; j <= a.back(); j += a[i]) edge[a[f[j]] % a[i]].push_back({i, f[j]});
}
int ans = 0;
for(int w = 0; w <= 10000000; w++){
for(auto [u, v]: edge[w]) if(dsu.unon(u, v)) ans += w;
}
cout << ans;
}
int main(){
ios_base::sync_with_stdio(false);
cin.tie(0); cout.tie(0);
solve();
return 0;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |