Submission #442773

#TimeUsernameProblemLanguageResultExecution timeMemory
442773JovanBK blocks (IZhO14_blocks)C++17
100 / 100
161 ms2600 KiB
#include <bits/stdc++.h> using namespace std; using ll = long long; using ld = long double; const int MAXN = 100000; int a[MAXN+5]; int dp[MAXN+5]; int dpp[MAXN+5]; const int INF = 1000000000; int main(){ ios_base::sync_with_stdio(false), cin.tie(0); cout.precision(10); cout << fixed; int n, k; cin >> n >> k; for(int i=1; i<=n; i++) cin >> a[i]; k--; for(int i=1; i<=n; i++) dp[i] = max(dp[i-1], a[i]); dp[0] = INF; while(k-- > 0){ for(int i=0; i<=n; i++){ dpp[i] = dp[i]; dp[i] = INF; } stack <tuple <int, int, int>> st; for(int i=1; i<=n; i++){ int gmn = dpp[i-1]; while(!st.empty() && get<0>(st.top()) <= a[i]){ gmn = min(gmn, get<2>(st.top())); st.pop(); } int rs = INF; if(!st.empty()) rs = get<1>(st.top()); st.push(make_tuple(a[i], min(rs, gmn + a[i]), gmn)); dp[i] = get<1>(st.top()); } } cout << dp[n] << "\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...