Submission #1141264

#TimeUsernameProblemLanguageResultExecution timeMemory
1141264NurislamK blocks (IZhO14_blocks)C++20
53 / 100
1093 ms4932 KiB
#include <bits/stdc++.h> using namespace std; #define int long long const int inf = 1e16; struct spar{ vector<vector<int>> sp; int n; spar(vector<int> a){ n = a.size(); sp.resize(n + 1, vector<int> (22, 0)); for(int i = 1; i <= n; i++)sp[i][0] = a[i-1]; for(int l = 1; l < 22; l ++ ){ int len = (1<<(l-1)); for(int i = 1; i <= n; i++){ sp[i][l] = max(sp[i][l-1], sp[min(n, i + len)][l-1]); } } }; int get(int l, int r){ int lg = __lg(r-l+1); r = r - (1<<lg) + 1; return max(sp[l][lg], sp[r][lg]); }; }; signed main(){ int n, k; cin >> n >> k; vector<int> a(n); for(int & i : a)cin >> i; vector< vector<int> > dp( n + 1, vector<int> (k + 1, inf)); spar sp(a); dp[0][0] = 0; for(int i = 1; i <= n; i++){ for(int x = 0; x < i; x++){ for(int j = 1; j <= k; j++){ dp[i][j] = min(dp[i][j], dp[x][j-1] + sp.get(x + 1, i)); } } } 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...