Submission #53387

#TimeUsernameProblemLanguageResultExecution timeMemory
53387MatheusLealVK blocks (IZhO14_blocks)C++17
0 / 100
75 ms95428 KiB
#include <bits/stdc++.h> #define N 100010 #define K 110 #define inf 200000000000000000LL #define f first #define s second using namespace std; typedef long long ll; typedef pair<ll, ll> pii; ll n, k, v[N], pref[N], dp[N][K], best[N][K]; int main() { ios::sync_with_stdio(false); cin.tie(0); cin>>n>>k; for(int i = 1; i <= n; i++) cin>>v[i]; for(int i = 0; i < N; i++) for(int j = 0; j < K; j++) dp[i][j] = inf; dp[0][1] = 0; for(int i = 1; i <= n; i++) { dp[i][1] = max(dp[i - 1][1], v[i]); best[i][1] = dp[i][1]; pref[i] = pref[i - 1] + v[i]; } dp[0][0] = 0; dp[0][1] = inf; for(int q = 2; q <= k; q++) { stack < pii > W; for(int i = 1; i <= n; i++) { ll opt = dp[i - 1][q - 1]; while(!W.empty() and W.top().f < v[i]) { opt = min(opt, W.top().s); W.pop(); } if(W.empty() or opt + v[i] < W.top().f + W.top().s) W.push({v[i], opt}); dp[i][k] = W.top().f + W.top().s; } } 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...