Submission #1106862

#TimeUsernameProblemLanguageResultExecution timeMemory
1106862vjudge1Sirni (COCI17_sirni)C++14
84 / 140
910 ms786432 KiB
#include <bits/stdc++.h> #define ii pair<int, int> #define fi first #define se second using namespace std; using ll = long long; const int nx=1e5+5; const int N=2e7+5; int n, a[nx], last[N], par[nx]; ll ans=0; vector<int> rar; vector<pair<int, ii>> ed; int find(int u) { if(!par[u]) return u; return par[u]=find(par[u]); } bool join(int u, int v) { u=find(u); v=find(v); if(u==v) return 0; par[v]=u; return 1; } int main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); cin>>n; for(int i = 1; i <= n; i++) cin>>a[i], rar.emplace_back(a[i]); sort(rar.begin(), rar.end()); rar.erase(unique(rar.begin(), rar.end()), rar.end()); n=rar.size(); for(int i = 1; i <= n; i++) { a[i]=rar[i-1]; last[a[i]]=i; } for(int i = N-2; i >= 1; i--) { if(last[i]) continue; if(last[i+1]) last[i]=last[i+1]; } for(int i = 1; i <= n; i++) { if(last[a[i]+1]) ed.push_back({a[last[a[i]+1]]%a[i], {i, last[a[i]+1]}}); for(int j = 2*a[i]; j < N; j+=a[i]) if(last[j]) ed.push_back({a[last[j]]%a[i], {i, last[j]}}); } sort(ed.begin(), ed.end()); for(auto it:ed) if(join(it.se.fi, it.se.se)) ans+=it.fi; 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...