Submission #1301968

#TimeUsernameProblemLanguageResultExecution timeMemory
1301968EkinOnalSirni (COCI17_sirni)C++20
0 / 140
403 ms242380 KiB
#include <bits/stdc++.h> using namespace std; // #define double long double #define int long long #define pb push_back #define vi vector<int> #define vpii vector<pair<int,int>> #define MAX 200005 #define f first #define s second const int INF = 1e18; const int mod = 2019201997; #define pii pair<int,int> int sum(int a,int b){return ((a%mod)+(b%mod))%mod;} int mul(int a,int b){return ((a%mod)*(b%mod))%mod;} vi dsu(MAX),sz(MAX); int find(int a){ if(dsu[a]==a) return a; return dsu[a]=find(dsu[a]); } void unite(int a,int b){ a=find(a); b=find(b); if(a==b) return; if(sz[a]<sz[b]) swap(a,b); sz[a]+=sz[b]; dsu[b]=a; } vector<array<int,3>> edges; void solve(){ int n; cin>>n; vi val(1e7+2); vi v(n); for(int i=0;i<n;i++) cin>>v[i],dsu[i]=i,sz[i]=1; sort(v.begin(),v.end()); v.erase(unique(v.begin(),v.end()),v.end()); for(int i=0;i<v.size();i++){ // cout<<v[i]<<" 23\n"; val[v[i]]=i+1; } vpii nxt(1e7+2,{INF,INF}); int j=n-1; for(int i=1e7;i>0;i--){ if(v[j]==i) nxt[i]={i,j+1},j--; else nxt[i]=nxt[i+1]; } for(int i=1;i<=1e7;i++){ if(!val[i]) continue; for(int j=i;j<=1e7;j+=i){ if(nxt[j+(j==i)].f>=j+i) continue; edges.pb({ nxt[j+(j==i)].f % i , val[i] , nxt[j+(j==i)].s } ); } } sort(edges.begin(),edges.end()); int ans=0; for(auto u : edges){ if(find(u[1])==find(u[2])) continue; ans+=u[0]; unite(u[1],u[2]); } cout<<ans<<endl; } int32_t main(){ // freopen("walk.in","r",stdin); // freopen("walk.out","w",stdout); int t=1; // cin>>t; while(t--) solve(); }
#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...