Submission #659698

#TimeUsernameProblemLanguageResultExecution timeMemory
659698Sohsoh84Diversity (CEOI21_diversity)C++17
38 / 100
7032 ms11892 KiB
#include <bits/stdc++.h> using namespace std; typedef long long ll; typedef pair<ll, ll> pll; #define all(x) (x).begin(),(x).end() #define X first #define Y second #define sep ' ' #define endl '\n' #define debug(x) cerr << #x << ": " << x << endl; const ll MAXN = 1e6 + 10; const ll INF = 4e18; int n, q, cnt[MAXN], A[MAXN]; ll dp[MAXN]; int main() { ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0); cin >> n >> q; for (int i = 1; i <= n; i++) { int A[i]; cin >> A[i]; cnt[A[i]]++; } vector<int> vec = {0}; for (int i = 0; i < MAXN; i++) if (cnt[i]) vec.push_back(cnt[i]); int m = vec.size() - 1; sort(all(vec)); fill(dp, dp + MAXN, INF); dp[0] = 0; ll s = 0; for (int i = 1; i <= m; i++) { for (int j = s + vec[i]; j >= 0; j--) { ll ans = INF; if (j <= s) ans = min(ans, dp[j] + (s - j) * (n - s + j)); if (j >= vec[i]) ans = min(ans, dp[j - vec[i]] + 1ll * j * (n - j)); dp[j] = ans; } s += vec[i]; } cout << *min_element(dp, dp + MAXN) + 1ll * n * (n + 1) / 2 << endl; 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...