#include <bits/stdc++.h>
using namespace std;
struct DSU {
vector<int> p, sz;
int c;
DSU(int n):p(n),sz(n,1),c(n){
for(int i=0;i<n;i++)p[i]=i;
}
int f(int x){return p[x]==x?x:p[x]=f(p[x]);}
bool u(int a,int b){
a=f(a);b=f(b);
if(a==b)return false;
if(sz[a]<sz[b])swap(a,b);
p[b]=a;sz[a]+=sz[b];c--;return true;
}
};
int main(){
ios::sync_with_stdio(false);
cin.tie(nullptr);
int N;cin>>N;vector<long long> A(N);for(int i=0;i<N;i++)cin>>A[i];
static vector<int> idx[100001];for(int i=0;i<=100000;i++)idx[i].clear();
long long mx=0;for(int i=0;i<N;i++){mx=max(mx,A[i]);idx[A[i]].push_back(i);}
DSU dsu(N);
for(int v=0;v<=100000;v++){
if(idx[v].size()>1){
for(int j=1;j<(int)idx[v].size();j++){
dsu.u(idx[v][0],idx[v][j]);
}
}
}
vector<int> rep(100001,-1);
for(int v=0;v<=100000;v++){
if(!idx[v].empty())rep[v]=idx[v][0];
}
vector<long long> distinct;
for(int v=0;v<=mx;v++){
if(rep[v]!=-1)distinct.push_back(v);
}
vector<array<long long,3>> edges;
auto addE=[&](long long x,long long y){
if(x==y)return;
long long c1=x%y,c2=y%x;edges.push_back({min(c1,c2),rep[x],rep[y]});
};
sort(distinct.begin(),distinct.end());
for(long long x:distinct){
if(x==0)continue;
for(long long m=x;m<=mx;m+=x){
auto it=lower_bound(distinct.begin(),distinct.end(),m);
if(it!=distinct.begin())addE(x,*(it-1));
if(it!=distinct.end())addE(x,*it);
}
}
sort(edges.begin(),edges.end(),[&](auto&a,auto&b){return a[0]<b[0];});
long long ans=0;
for(auto&e:edges){
if(dsu.u(e[1],e[2])){ans+=e[0];if(dsu.c==1)break;}
}
cout<<ans<<"\n";
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... |