Submission #1042612

#TimeUsernameProblemLanguageResultExecution timeMemory
1042612AbitoSirni (COCI17_sirni)C++17
28 / 140
4204 ms786432 KiB
#include <bits/stdc++.h> #define F first #define S second #define pb push_back #define ppb pop_back #define ep insert #define endl '\n' #define elif else if #define pow pwr #define sqrt sqrtt //#define int long long #define ll long long #define y1 YONE typedef unsigned long long ull; using namespace std; const int N=1e7+5; int a[N],n,par[N],sz[N]; int getpar(int x){ if (x==par[x]) return x; return par[x]=getpar(par[x]); } void link(int x,int y){ x=getpar(x); y=getpar(y); if (x==y) return; if (sz[x]>sz[y]) swap(x,y); sz[y]+=sz[x]; par[x]=y; return; } int32_t main(){ ios_base::sync_with_stdio(false);cin.tie(NULL);cout.tie(NULL); cin>>n; for (int i=1;i<=n;i++) cin>>a[i],par[i]=i,sz[i]=1; sort(a+1,a+1+n); vector<vector<int>> v; for (int i=1;i<n;i++){ v.pb({a[i+1]%a[i],i,i+1}); for (int j=a[i]*2;j<N;j+=i){ int l=1,r=n,mid,idx=-1; while (l<=r){ mid=(l+r)/2; if (a[mid]>=j){ idx=mid; r=mid-1; }else l=mid+1; } if (idx==-1) break; if (a[idx]>=j+i) continue; v.pb({a[idx]%a[i],i,idx}); } }ll ans=0; sort(v.begin(),v.end()); for (auto u:v){ int x=getpar(u[1]),y=getpar(u[2]); if (x==y) continue; ans+=(ll)u[0]; link(x,y); }cout<<ans<<endl; 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...