Submission #1142253

#TimeUsernameProblemLanguageResultExecution timeMemory
1142253NurislamK blocks (IZhO14_blocks)C++17
100 / 100
318 ms84964 KiB
#include <bits/stdc++.h> using namespace std; #define int long long signed main(){ int n, k; cin >> n >> k; int inf = 1e9; vector<vector<int>> dp( n + 1, vector<int> (k+1, inf)); vector<int> a(n+1); for(int i = 1; i <= n; i++){ cin >> a[i]; dp[i][1] = max(dp[i-1][1], a[i]); if(i == 1)dp[i][1] = a[i]; } for(int j = 2; j <= k; j ++ ){ vector<array<int,2>> v; for(int i = j; i <= n; i++){ int mn = dp[i-1][j-1]; while(v.size() && v.back()[0] <= a[i]) { mn = min(mn, v.back()[1]); v.pop_back(); }; dp[i][j] = mn + a[i]; if(v.size())dp[i][j] = min(dp[i][j], v.back()[0] + v.back()[1]); if((v.size() && v.back()[0] + v.back()[1] >= a[i] + mn) || v.empty())v.push_back({a[i], mn}); } } //for(int j = 1; j <= k; j ++ ){ //for(int i = 1; i <= n; i++)cout << dp[i][j] << ' '; //cout << '\n'; //} cout << dp[n][k] << '\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...