Submission #100745

#TimeUsernameProblemLanguageResultExecution timeMemory
100745dalgerokSirni (COCI17_sirni)C++17
0 / 140
5150 ms787456 KiB
#include<bits/stdc++.h> using namespace std; const int N = 1e7 + 1; int n, dp[N], p[N]; long long ans; bool used[N]; vector < pair < int, int > > g[N]; int dsu_get(int v){ return p[v] == v ? v : p[v] = dsu_get(p[v]); } inline void dsu_unite(int x, int y){ x = dsu_get(x); y = dsu_get(y); if(rand() & 1){ swap(x, y); } p[x] = y; } int main(){ srand(time(nullptr)); ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0); cin >> n; for(int i = 1; i <= n; i++){ int x; cin >> x; p[x] = x; used[x] = true; } for(int i = N - 1; i >= 1; i--){ if(used[i]){ dp[i] = i; } else{ dp[i] = dp[i + 1]; } } for(int i = 1; i < N; i++){ if(used[i]){ for(int j = 1; i * j < N; j++){ int x = i * j, y; y = dp[x]; if(y != 0){ g[y % i].push_back(make_pair(i, y)); } y = dp[x + 1]; if(y != 0){ g[y % i].push_back(make_pair(i, y)); } } } } for(int i = 0; i < N; i++){ for(auto it : g[i]){ int x = it.first, y = it.second; if(dsu_get(x) != dsu_get(y)){ ans += i; dsu_unite(x, y); } } } cout << ans; }
#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...