#include <bits/stdc++.h>
using namespace std;
struct Edge{
    int u,v;
    int w;
    Edge(int _u,int _v,int _w):u(_u),v(_v),w(_w){}
    Edge():u(0),v(0),w(0){}
    bool operator<(Edge const& o)const{return w<o.w;}
} e[20000007];
int m=0;
struct DSU{
    vector<int> par,rank;
    DSU(int n):par(n+1),rank(n+1){}
    void make_set(int u){
        par[u]=u;
        rank[u]=0;
    }
    int find_set(int v){return par[v]==v?v:find_set(par[v]);}
    bool union_set(int u,int v){
        u=find_set(u);
        v=find_set(v);
        if(u!=v){
            if(rank[u]<rank[v]) swap(u,v);
            par[v]=u;
            if(rank[u]==rank[v]) rank[u]++;
            return 1;
        }
        else return 0;
    }
};
int n,p[100005];
int main()
{
    ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0);
    cin>>n;
    for(int i=1;i<=n;i++) cin>>p[i];
    sort(p+1,p+1+n);
    int mx=*max_element(p+1,p+1+n);
    for(int i=1;i<=n;i++){
        for(int j=p[i];j<=mx;j+=p[i]){
            auto it=lower_bound(p+i+1,p+n+1,j);
            if(it==p+n+1) break;
            int j1=it-p;
            e[++m]={i,j1,p[j1]-j};
        }
    }
    //-----------------------------------------
    sort(e+1,e+1+m);
    DSU d(n);
    for(int i=1;i<=n;i++) d.make_set(i);
    int total=0;
    int dem=0;
    for(int i=1;i<=m;i++){
        auto [u,v,w]=e[i];
        if(d.union_set(u,v)){
            total+=w;
            if(++dem==n-1) break;
        }
    }
    cout<<total;
}
| # | 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... |