#include<bits/stdc++.h>
using namespace std;
#define int long long
#define el '\n'
#define pii pair<int , int>
const int N = 1e5 + 5;
const int inf = 1e18;
int n, par[N];
struct node {
int u, v, w;
bool operator < (node &other) const {
return w < other.w;
}
};
int get(int v) {
return v == par[v] ? v : par[v] = get(par[v]);
}
bool unite(int u, int v) {
u = get(u);
v = get(v);
if(u == v) return 0;
par[v] = u;
return 1;
}
void solve() {
cin >> n;
vector<int> a(n);
map<int, int> pos;
int M = 0;
for(int i = 0 ; i < n ; i++) {
cin >> a[i];
pos[a[i]] = i + 1;
M = max(M, a[i]);
}
sort(a.begin(), a.end());
for(int i = 1 ; i <= n ; i++) par[i] = i;
vector<node> edge;
for(int i = 0 ; i < n ; i++) {
int k = 1;
while(k * a[i] <= M) {
vector<int>::iterator q;
if(k == 1) {
q = upper_bound(a.begin(), a.end(), k * a[i]);
} else {
q = lower_bound(a.begin(), a.end(), k * a[i]);
}
if(q != a.end()) {
int p = q - a.begin();
int u = pos[a[i]];
int v = pos[a[p]];
if(u == v) {
k++;
continue;
}
if (a[i] != 0 && a[p] != 0) {
int w = min(a[i] % a[p], a[p] % a[i]);
edge.push_back({u, v, w});
}
}
k++;
}
}
int ans = 0;
sort(edge.begin(), edge.end());
for(auto [u, v, w] : edge) {
if(unite(u, v)) ans += w;
}
cout << ans << el;
}
int32_t main() {
ios_base::sync_with_stdio(false);
cin.tie(0);
solve();
}
# | 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... |