Submission #1123386

#TimeUsernameProblemLanguageResultExecution timeMemory
1123386duckindogK blocks (IZhO14_blocks)C++20
100 / 100
239 ms88172 KiB
#include <bits/stdc++.h> using namespace std; const int N = 100'000 + 10; const long long MAX = 1'000'000'000'000'000; int n, k; int a[N]; int32_t main() { cin.tie(0)->sync_with_stdio(0); cin >> n >> k; for (int i = 1; i <= n; ++i) cin >> a[i]; vector<vector<long long>> f(k + 10, vector<long long>(n + 10, MAX)); f[0][0] = 0; for (int i = 1; i <= k; ++i) { vector<long long> g(n + 10, MAX); stack<int> st; for (int j = 1; j <= n; ++j) { auto& ret = f[i][j]; g[j] = f[i - 1][j - 1]; while (st.size() && a[st.top()] <= a[j]) { g[j] = min(g[j], g[st.top()]); st.pop(); } ret = g[j] + a[j]; if (st.size()) ret = min(ret, f[i][st.top()]); st.push(j); } } cout << f[k][n] << "\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...