Submission #469913

#TimeUsernameProblemLanguageResultExecution timeMemory
469913iulia13K blocks (IZhO14_blocks)C++14
100 / 100
195 ms41008 KiB
#include <bits/stdc++.h> using namespace std; const int N = 1e5 + 5; const int LVL = 105; const int INF = 1e9 + 5; int a[N]; int dp[LVL][N]; int sol[N]; int st[N]; int main() { int n, i, K; cin >> n >> K; for (i = 1; i <= n; i++) { cin >> a[i]; dp[1][i] = max(dp[1][i - 1], a[i]); } for (i = 1; i <= K; i++) dp[i][0] = INF; for (int lvl = 2; lvl <= K; lvl++) { int k = 0; for (i = 1; i <= n; i++) { int ans = dp[lvl - 1][i - 1]; ///a[i] singur while (k && a[st[k]] <= a[i]) /// [.......][....st[k]]...i] { ans = min(ans, sol[st[k]]); k--; } sol[i] = ans; dp[lvl][i] = a[i] + ans; if (k) dp[lvl][i] = min(dp[lvl][i], dp[lvl][st[k]]); st[++k] = i; } } cout << dp[K][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...