Submission #1159988

#TimeUsernameProblemLanguageResultExecution timeMemory
115998812345678Sirni (COCI17_sirni)C++17
0 / 140
557 ms537752 KiB
#include <bits/stdc++.h> using namespace std; const int nx=1e5+5, kx=1e7+5; int n, dsu[nx], mx, idx, res, p[nx]; vector<int> qrs[kx]; vector<pair<int, int>> edg[kx], v; int find(int x) { if (dsu[x]==x) return x; return dsu[x]=find(dsu[x]); } int main() { cin.tie(NULL)->sync_with_stdio(false); cin>>n; for (int i=1; i<=n; i++) cin>>p[i], dsu[i]=i, mx=max(mx, p[i]), v.push_back({p[i], i}); sort(v.begin(), v.end()); idx=n-1; for (int i=1; i<=n; i++) for (int j=p[i]; j<=mx; j+=p[i]) qrs[j].push_back(i); for (int i=mx; i>=1; i--) { while (idx>0&&v[idx-1].first>=i) idx--; //cout<<"here "<<i<<' '<<v[idx].first<<' '<<v[idx].second<<'\n'; for (auto x:qrs[i]) { //if (x==1&&v[idx].second==4) cout<<"bug\n"; edg[v[idx].first-i].push_back({x, v[idx].second}); } } for (int i=1; i<n; i++) if (v[i].first==v[i-1].first) dsu[find(v[i].second)]=find(v[i-1].second); for (int i=0; i<=mx; i++) for (auto [u, v]:edg[i]) { //cout<<"edg "<<u<<' '<<v<<' '<<i<<'\n'; if (find(u)!=find(v)) res+=i, dsu[find(u)]=find(v); } cout<<res; }
#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...