Submission #1267965

#TimeUsernameProblemLanguageResultExecution timeMemory
1267965madamadam3Split the sequence (APIO14_sequence)C++20
0 / 100
0 ms324 KiB
#include <bits/stdc++.h> using namespace std; #define int long long int using vi = vector<int>; using vvi = vector<vi>; int score(int n, int k, vi &order, vi &prefix) { set<int> used; used.insert(0); used.insert(n); int ans = 0; for (int i = 0; i < k; i++) { auto it1 = used.lower_bound(order[i]); int L = *prev(it1), R = *it1; ans += (prefix[order[i]] - prefix[L]) * (prefix[R] - prefix[order[i]]); used.insert(order[i]); } return ans; } signed main() { cin.tie(0)->sync_with_stdio(0); int n, k; cin >> n >> k; vi a(n); for (int i = 0; i < n; i++) cin >> a[i]; vi prefix(n+1, 0); for (int i = 0; i < n; i++) prefix[i+1] += a[i] + prefix[i]; vi base(n-1); iota(base.begin(), base.end(), 1); int base_score = score(n, n-1, base, prefix); while (base.size() > k) { vi nw; int nscore = -1; for (auto el : base) { vi nbase; for (auto &i : base) if (i != el) nbase.push_back(i); int ns = score(n, nbase.size(), nbase, prefix); if (ns > nscore) nw = nbase, nscore = ns; } base = nw; base_score = nscore; } cout << base_score << "\n"; for (auto &el : base) cout << el << " "; cout << "\n"; 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...