#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define ld long double
struct DSU{
vector<int> par, sz;
int N;
DSU(int _N){
N = _N;
sz = vector<int>(N + 5, 1);
par = vector<int>(N + 5, 0);
iota(par.begin(), par.end(), 0);
}
int rep(int x){
if(x == par[x]){
return x;
}
return par[x] = rep(par[x]);
}
bool comb(int u, int v){
u = rep(u); v = rep(v);
if(u != v){
if(sz[u] > sz[v]){
swap(u, v);
}
par[u] = v;
sz[v] += sz[u];
return 1;
}
return 0;
}
};
void solve(){
int N; cin >> N;
int maximum = 0;
vector<int> P;
for(int i = 1; i <= N; ++i){
int p; cin >> p;
P.push_back(p);
maximum = max(maximum, p);
}
sort(P.begin(), P.end());
P.resize(unique(P.begin(), P.end()) - P.begin());
vector<pair<int, int>> order;
for(int i = 0; i < P.size(); ++i){
order.push_back(make_pair(P[i], i));
}
vector<int> next(maximum + 1, -1);
for(int i = 1, j = 0; i <= maximum && j < P.size(); ++i){
while(j < P.size() && i > P[j]){
j++;
}
next[i] = j;
}
DSU dsu(P.size());
vector<vector<pair<int, int>>> edges(maximum + 1);
for(int i = 0; i < P.size() - 1; ++i){
int cur = P[i];
edges[P[i + 1] % cur].push_back(make_pair(i, i + 1));
for(int j = cur + cur; j <= maximum; j += cur){
if(next[j] != -1){
edges[P[next[j]] % cur].push_back(make_pair(i, next[j]));
}
}
}
ll answer = 0;
for(int i = 0; i <= maximum; ++i){
for(auto elem : edges[i]){
if(dsu.comb(elem.first, elem.second)){
answer += (ll)i;
}
}
}
cout << answer;
}
int main(){
ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
int tc = 1; //cin >> tc;
while(tc--){
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... |