Submission #1165336

#TimeUsernameProblemLanguageResultExecution timeMemory
1165336chiqouz7Sirni (COCI17_sirni)C++20
0 / 140
280 ms375140 KiB
#include <bits/stdc++.h> using namespace std; #define f first #define s second #define ll long long const int N = 1e5; const int M = 1e7 + 5; int p[N+1] = {}; int sz[N+1] = {}; int find(int a){ if(a == p[a]) return a; return p[a] = find(p[a]); } void unite(int a, int b){ if(a != b){ if(sz[a] < sz[b]) swap(a, b); p[b] = a; sz[a] += sz[b]; } } int main() { int n; cin>>n; vector<int> v(n); int m = 0; int close[M] = {}; int index[M] = {}; int mas[M] = {}; for(int i = 0; i < n; i++){ p[i] = i; sz[i] = 1; cin>>v[i]; close[v[i]] = v[i]; index[v[i]] = i; m = max(m, v[i]); } for(int i = M-2; i >= 0; i--){ if(!close[i]) close[i] = close[i+1]; } vector<vector<pair<int, int> > > e(M); for(int i = 0; i < n; i++){ if(mas[v[i]]++) continue; if(close[v[i]+1]){ if(2*v[i] >= M || close[2*v[i]] != close[v[i]+1]){ e[close[v[i]+1] - v[i]].push_back({i, index[close[v[i]+1]]}); } } for(int j = 2*v[i]; j < M && close[j]; j+=v[i]){ int x = close[j]; if(j+v[i] >= M || close[j+v[i]] != x){ e[x - j].push_back({i, index[x]}); } } } ll ans = 0; for(int i = 0; i < M; i++){ for(int j = 0; j < e[i].size(); j++){ int a = find(e[i][j].f); int b = find(e[i][j].s); if(a != b){ unite(a,b); ans += i; } } } cout<<ans; 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...