#include <bits/stdc++.h>
using namespace std;
// #define double long double
// #define int long long
#define pb push_back
#define vi vector<int>
#define vpii vector<pair<int,int>>
#define MAX 200005
#define f first
#define s second
const int INF = 1e9;
const int mod = 1e9+7;
#define pii pair<int,int>
int sum(int a,int b){return ((a%mod)+(b%mod))%mod;}
int mul(int a,int b){return ((a%mod)*(b%mod))%mod;}
vi dsu(1e5+2),sz(1e5+2);
int find(int a){
if(dsu[a]==a) return a;
return dsu[a]=find(dsu[a]);
}
void unite(int a,int b){
a=find(a); b=find(b);
if(a==b) return;
if(sz[a]<sz[b]) swap(a,b);
sz[a]+=sz[b]; dsu[b]=a;
}
vector<array<int,3>> edges;
void solve(){
int n; cin>>n;
vi v(n); for(int i=0;i<n;i++) cin>>v[i],dsu[i]=i,sz[i]=1;
sort(v.begin(),v.end()); v.erase(unique(v.begin(),v.end()),v.end());
n=v.size();
vi nxt(v[n-1]+2,-1); for(int i=0;i<n;i++) nxt[v[i]]=i;
for(int i=v[n-1];i>0;i--){
if(nxt[i]==-1) nxt[i]=nxt[i+1];
}
for(int i=0;i<n-1;i++){
edges.pb({ v[i+1]%v[i] , i, i+1 });
for(int j=2*v[i];j<=v[n-1];j+=v[i]){
// if(nxt[j]>=j+v[i]) continue;
edges.pb({ v[nxt[j]] % v[i] , i , nxt[j] } );
}
}
sort(edges.begin(),edges.end());
long long ans=0;
for(auto u : edges){
// cout<<u[0]<<" "<<u[1]<<" "<<u[2]<<endl;
if(find(u[1])==find(u[2])) continue;
ans+=u[0]; unite(u[1],u[2]);
// cout<<u[0]<<" "<<u[1]<<" "<<u[2]<<endl;
}
cout<<ans<<endl;
}
int32_t main(){
// freopen("walk.in","r",stdin);
// freopen("walk.out","w",stdout);
int t=1;
// cin>>t;
while(t--) 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... |