제출 #852770

#제출 시각아이디문제언어결과실행 시간메모리
852770hqminhuwuSirni (COCI17_sirni)C++17
140 / 140
1316 ms769468 KiB
#include <bits/stdc++.h>
#define forr(_a,_b,_c) for(_a = _b; _a <= _c; ++_a)
#define ford(_a,_b,_c) for(_a = (_b) + 1; _a --> _c;)
#define forf(_a,_b,_c) for(_a = _b; _a < _c; ++_a)
#define st first
#define nd second
#define ll long long
#define ull unsigned long long
#define pii pair <int,int>
#define pll pair <ll,ll>
#define piii pair <int,pii>
#define vi vector <int>
#define pb push_back
#define mp make_pair
#define all(x) begin(x),end(x)
#define file "test"


using namespace std;
const int N = 1e5 + 5;
const ll oo = 1e9;
const ll mod = 1e9 + 7;

int par[N],sz[N];
int get (int u){
	if (u == par[u])
		return u;
	return par[u] = get(par[u]);
}
void update (int u, int v){
	if (sz[u] < sz[v])
		swap(u,v);
	par[v] = u;
	sz[u] += sz[v];
}

int n,i,a[N],f[10000002];
vector <pii> v[10000002];
ll ans;
int main(){
	ios_base::sync_with_stdio(0); cin.tie(0);
	cin >> n;
	forr (i,1,n)
		cin >> a[i];
	sort(a + 1, a + 1 + n);
	forr (i,1,n){
		if (a[i] != a[i + 1])
			f[a[i]] = i;
		par[i] = i;
		sz[i] = 1;
	}
	ford (i,10000000,1)
	if (!f[i])
		f[i] = f[i + 1];
	forr (i,1,n){
		if (a[i] == a[i + 1])
			continue;
		int cur = 2 * a[i];
		if (i < n)
			v[a[i + 1] % a[i]].pb({i,f[a[i + 1]]});
		while (cur <= 10000000){
			if (!f[cur])
				break;
			
			v[a[f[cur]] % a[i]].pb({i,f[cur]});
			cur += a[i];
		}
	}
	forr (i,0,10000000)
	for (pii k : v[i]){
		int p = get(k.st), q = get (k.nd);
		if (p != q)
			update(p,q), ans += i;
	}
	cout << ans << "\n";
	return 0;
}
/*



*/

#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...