Submission #949219

#TimeUsernameProblemLanguageResultExecution timeMemory
949219vjudge1Sirni (COCI17_sirni)C++17
98 / 140
5056 ms51780 KiB
#include <bits/stdc++.h> using namespace std; #define all(x) x.begin(), x.end() #define ar array #define pb push_back #define ln '\n' //#define int long long using i64 = long long; template <class F, class _S> bool chmin(F &u, const _S &v){ bool flag = false; if ( u > v ){ u = v; flag |= true; } return flag; } template <class F, class _S> bool chmax(F &u, const _S &v){ bool flag = false; if ( u < v ){ u = v; flag |= true; } return flag; } signed main(){ ios_base::sync_with_stdio(false); cin.tie(nullptr); int n; cin >> n; vector <int> a(n); for ( auto &u: a ) cin >> u; sort(all(a)); a.resize(unique(all(a)) - a.begin()); n = a.size(); int N = *max_element(all(a)) + 1; vector <int> fa(N); vector <ar<int,2>> nxt(n, {N, -1}); vector <vector<int>> C(n); set <int> st; for ( int i = 0; i < n; i++ ){ C[i].pb(i); st.insert(a[i]); fa[a[i]] = i; } int ans = 0; do{ int c = 0; for ( auto &u: C ){ c += !u.empty(); } if ( c == 1 ) break; for ( int i = 0; i < n; i++ ){ for ( auto &u: C[i] ){ st.erase(a[u]); } assert(!st.empty()); for ( auto &p: C[i] ){ int u = a[p]; for ( int j = u; j < N; j += u ){ auto it = st.lower_bound(j); if ( it != st.end() ){ chmin(nxt[i], ar<int,2> {*it % j, fa[*it]}); chmin(nxt[fa[*it]], ar<int,2> {*it % j, i}); } chmax(j, *it / j * j); } } for ( auto &u: C[i] ){ st.insert(a[u]); } } auto upd = [&](int i, int j){ for ( auto &u: C[j] ){ fa[a[u]] = i; C[i].pb(u); } C[j].clear(); }; for ( int i = 0; i < n; i++ ){ if ( C[i].empty() || nxt[i][1] == -1 ){ nxt[i] = {N, -1}; continue; } auto [w, j] = nxt[i]; nxt[i] = {N, -1}; if ( !C[j].empty() ){ ans += w; if ( C[j].size() < C[i].size() ){ upd(i, j); } else upd(j, i); } } } while ( true ); cout << ans; cout << '\n'; }
#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...