제출 #482815

#제출 시각아이디문제언어결과실행 시간메모리
482815ShinSirni (COCI17_sirni)C++14
140 / 140
3935 ms721572 KiB
#include <bits/stdc++.h> #define fi first #define se second #define mp make_pair #define all(x) x.begin(), x.end() using namespace std; const int N = 2e5 + 7; const int MOD = 1e9 + 7; // 998244353; const int INF = 1e9 + 7; const long long INFLL = 1e18 + 7; template <class X, class Y> bool minimize(X &a, Y b) { if (a > b) return a = b, true; return false; } template <class X, class Y> bool maximize(X &a, Y b) { if (a < b) return a = b, true; return false; } struct Disjoint_set { vector<int> lab; Disjoint_set(int n = 0) { lab.assign(n + 7, -1); } int root(int u) { return lab[u] < 0 ? u : lab[u] = root(lab[u]); } bool unite(int u, int v) { u = root(u); v = root(v); if (u == v) return false; if (lab[u] > lab[v]) swap(u, v); lab[u] += lab[v]; lab[v] = u; return true; } }; const int MAX = 1e7; int n; int a[N]; int nxt[MAX + 7]; vector<pair<int, int>> val[MAX]; void solve(void) { cin >> n; for (int i = 1; i <= n; i ++) cin >> a[i]; sort(a + 1, a + n + 1); for (int i = 1; i <= n; i ++) nxt[a[i]] = i; for (int i = MAX; i > 0; i --) if (nxt[i] == 0) { nxt[i] = nxt[i + 1]; } for (int i = 1; i <= n; i ++) { if (nxt[a[i]] != i) val[0].emplace_back(i, nxt[a[i]]); if (nxt[a[i] + 1]) val[(a[nxt[a[i] + 1]] % a[i])].emplace_back(i, nxt[a[i] + 1]); for (int j = a[i] * 2; j <= MAX; j += a[i]) { if (!nxt[j]) break; if (j + a[i] >= a[nxt[j]]) { assert(a[nxt[j]] - j >= 0); val[a[nxt[j]] - j].emplace_back(i, nxt[j]); } } } long long res = 0; Disjoint_set dsu(n); for (int i = 0; i < MAX; i ++) { for (pair<int, int> x: val[i]) if (dsu.unite(x.fi, x.se)) { // cout << x.se << " " << x.fi << ' ' << i << '\n'; res += i; } } cout << res; } int main(void) { cin.tie(0)->sync_with_stdio(0); int test = 1; // cin >> test; while (test --) { 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...