Submission #1106872

#TimeUsernameProblemLanguageResultExecution timeMemory
1106872vjudge1Sirni (COCI17_sirni)C++14
84 / 140
986 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); function<int(int)> find = [&](int u) -> int { if(!par[u]) return u; return par[u]=find(par[u]); }; function<bool(int, int)> join = [&](int u, int v) -> int { u = find(u); v = find(v); if(u == v)return 0; par[v] = u; return 1; }; 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...