제출 #797344

#제출 시각아이디문제언어결과실행 시간메모리
797344finn__Diversity (CEOI21_diversity)C++17
38 / 100
439 ms6220 KiB
#include <bits/stdc++.h> using namespace std; constexpr size_t N = 300000, M = 1000; uint64_t f[2][N], s[M], p[M]; template <typename T> T gauss(T n) { return (n * (n + 1)) / 2; } template <typename T> T range_gauss(T a, T b) { return gauss(b) - (a ? gauss(a - 1) : 0); } int main() { ios_base::sync_with_stdio(0); cin.tie(0); size_t n, q; cin >> n >> q; for (size_t i = 0; i < n; ++i) { size_t a; cin >> a; s[a - 1]++; } sort(s, s + M); partial_sum(s, s + M, p); memset(f, 255, sizeof f); f[0][0] = 0; for (size_t j = 0; j < M; ++j) { size_t const u = j & 1, v = (j & 1) ^ 1; memset(f[v], 255, sizeof f[v]); for (size_t i = 0; i <= (j ? p[j - 1] : 0); ++i) if (f[u][i] != UINT64_MAX) { // Extend left uint64_t l = i, r = l + s[j] - 1; f[v][i + s[j]] = min(f[v][i + s[j]], f[u][i] + (r + 1) * n - l * l - range_gauss(l, r)); // Extend right r = n - ((j ? p[j - 1] : 0) - i) - 1, l = r - s[j] + 1; f[v][i] = min(f[v][i], f[u][i] + (r + 1) * n - l * l - range_gauss(l, r)); } } uint64_t ans = UINT64_MAX; for (size_t i = 0; i < n; ++i) ans = min(ans, f[M & 1][i]); cout << ans << '\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...