Submission #1164162

#TimeUsernameProblemLanguageResultExecution timeMemory
1164162KindaNamelessSirni (COCI17_sirni)C++20
140 / 140
1531 ms746984 KiB
#include <bits/stdc++.h> using namespace std; #define ll long long #define ld long double struct DSU{ vector<int> par, sz; int N; DSU(int _N){ N = _N; sz = vector<int>(N + 5, 1); par = vector<int>(N + 5, 0); iota(par.begin(), par.end(), 0); } int rep(int x){ if(x == par[x]){ return x; } return par[x] = rep(par[x]); } bool comb(int u, int v){ u = rep(u); v = rep(v); if(u != v){ if(sz[u] > sz[v]){ swap(u, v); } par[u] = v; sz[v] += sz[u]; return 1; } return 0; } }; void solve(){ int N; cin >> N; int maximum = 0; vector<int> P; for(int i = 1; i <= N; ++i){ int p; cin >> p; P.push_back(p); maximum = max(maximum, p); } sort(P.begin(), P.end()); P.resize(unique(P.begin(), P.end()) - P.begin()); vector<pair<int, int>> order; for(int i = 0; i < P.size(); ++i){ order.push_back(make_pair(P[i], i)); } vector<int> next(maximum + 1, -1); for(int i = 1, j = 0; i <= maximum && j < P.size(); ++i){ while(j < P.size() && i > P[j]){ j++; } next[i] = j; } DSU dsu(P.size()); vector<vector<pair<int, int>>> edges(maximum + 1); for(int i = 0; i < P.size() - 1; ++i){ int cur = P[i]; edges[P[i + 1] % cur].push_back(make_pair(i, i + 1)); for(int j = cur + cur; j <= maximum; j += cur){ if(next[j] != -1){ edges[P[next[j]] % cur].push_back(make_pair(i, next[j])); } } } ll answer = 0; for(int i = 0; i <= maximum; ++i){ for(auto elem : edges[i]){ if(dsu.comb(elem.first, elem.second)){ answer += (ll)i; } } } cout << answer; } int main(){ ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); int tc = 1; //cin >> tc; while(tc--){ solve(); } 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...