Submission #655279

#TimeUsernameProblemLanguageResultExecution timeMemory
655279benjaminkleynSplit the sequence (APIO14_sequence)C++17
33 / 100
67 ms131072 KiB
#include <bits/stdc++.h> using namespace std; typedef long long ll; int N, K, a[100001]; ll pref[100001] = {0}; ll dp[100001][201] = {0}; int last_split[100001][201]; ll eval(int j, int i, int k) { return dp[j][k-1] + pref[j] * (pref[i] - pref[j]); } int main() { cin >> N >> K; for (int i = 1; i <= N; i++) { cin >> a[i]; pref[i] = pref[i-1] + a[i]; } deque<int> cht; for (int k = 1; k <= K; k++) { cht = deque<int>(); for (int i = k + 1; i <= N; i++) { dp[i][k] = 0; cht.push_back(i - 1); while (cht.size() >= 2 && eval(cht[0], i, k) <= eval(cht[1], i, k)) cht.pop_front(); dp[i][k] = eval(cht[0], i, k); last_split[i][k] = cht[0]; } } cout << dp[N][K] << '\n'; int i = N; do { i = last_split[i][K]; cout << i << ' '; } while (--K); 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...