#include <bits/stdc++.h>
#define ll long long
#define fi first
#define se second
#define pii pair <int , int>
#define arr3 array <int , 3>
/*
+ array limit ???
+ special case ??? n = 1?
+ time limit ???
*/
using namespace std;
const int INF = 1e18 + 7;
const int maxn = 1e7 + 7;
struct DSU
{
vector <int> parent;
vector <int> sz;
void init(int n)
{
parent.assign(n+5 , 0);
sz.assign(n+5 , 0);
for(int i =1 ; i <= n; i++)
{
sz[i] = 1;
parent[i] = i;
}
}
int find_par(int u)
{
if(parent[u] == u) return u;
return parent[u] = find_par(parent[u]);
}
void unionset(int u , int v)
{
u = find_par(u);
v = find_par(v);
if(u == v) return;
if(sz[u] < sz[v]) swap(u , v);
parent[v] = u;
sz[u] += sz[v];
}
bool connected(int u , int v)
{
return find_par(u) == find_par(v);
}
} dsu;
int n , nxt[maxn];
vector <int> a;
vector <pii> edge[maxn];
void solve()
{
cin >> n;
for(int i = 1; i <= n; i++)
{
int x; cin >> x; a.push_back(x);
}
a.push_back(-1);
sort(a.begin() , a.end());
a.erase(unique(a.begin() , a.end()) , a.end());
n = a.size() - 1;
dsu.init(n);
for(int i = 1; i <= n; i++) nxt[a[i]] = i;
for(int i = a.back() - 1; i >= 1; i--)
{
if(nxt[i] == 0) nxt[i] = nxt[i+1];
}
for(int i = 1; i < n; i++)
{
edge[a[i+1]%a[i]].push_back({i , i+1});
for(int j = a[i]*2; j <= a.back(); j += a[i])
{
edge[a[nxt[j]]%a[i]].push_back({i , nxt[j]});
}
}
int ans = 0;
for(int w = 0; w <= 1e7; w++)
{
for(pii tmp: edge[w])
{
int u = tmp.fi;
int v = tmp.se;
if(!dsu.connected(u , v))
{
dsu.unionset(u , v);
ans += w;
}
}
}
cout << ans << '\n';
}
signed main()
{
ios_base::sync_with_stdio(false);
cin.tie(0); cout.tie(0);
solve();
return 0;
}
Compilation message (stderr)
sirni.cpp:16:22: warning: overflow in conversion from 'double' to 'int' changes value from '1.0e+18' to '2147483647' [-Woverflow]
16 | const int INF = 1e18 + 7;
| ~~~~~^~~
# | 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... |