Submission #1165343

#TimeUsernameProblemLanguageResultExecution timeMemory
1165343chiqouz7Sirni (COCI17_sirni)C++20
98 / 140
1124 ms851968 KiB
#include <bits/stdc++.h> using namespace std; #define f first #define s second #define ll long long const ll N = 1e5; const ll M = 1e7 + 5; ll p[N+1] = {}; ll sz[N+1] = {}; ll find(ll a){ if(a == p[a]) return a; return p[a] = find(p[a]); } void unite(ll a, ll b){ if(a != b){ if(sz[a] < sz[b]) swap(a, b); p[b] = a; if(sz[a] == sz[b]) sz[a]++; } } int main() { ll n; cin>>n; vector<ll> v(n); ll close[M] = {}; ll index[M] = {}; ll mas[M] = {}; memset(index, -1, sizeof index); for(ll i = 0; i < n; i++){ p[i] = i; sz[i] = 0; cin>>v[i]; close[v[i]] = v[i]; if(index[v[i]] == -1) index[v[i]] = i; } for(ll i = M-2; i >= 0; i--){ if(!close[i]) close[i] = close[i+1]; } vector<vector<pair<ll, ll> > > e(M); for(ll i = 0; i < n; i++){ if(mas[v[i]]++) continue; if(close[v[i]+1]){ if(2*v[i] >= M || close[2*v[i]] != close[v[i]+1]){ e[close[v[i]+1] - v[i]].push_back({i, index[close[v[i]+1]]}); } } for(ll j = 2*v[i]; j < M && close[j]; j+=v[i]){ ll x = close[j]; if(j+v[i] >= M || close[j+v[i]] != x){ e[x - j].push_back({i, index[x]}); } } } ll ans = 0; for(ll i = 0; i < M; i++){ for(ll j = 0; j < e[i].size(); j++){ ll a = find(e[i][j].f); ll b = find(e[i][j].s); if(a != b){ unite(a,b); ans += i; } } } cout<<ans; 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...