제출 #1304735

#제출 시각아이디문제언어결과실행 시간메모리
1304735haron1337K개의 묶음 (IZhO14_blocks)C++20
100 / 100
173 ms83992 KiB
#include <bits/stdc++.h> using namespace std; #define int long long #define fi first #define se second #define pb push_back #define ii pair<int , int> #define iii pair<int , pair<int , int>> #define fo(i,l,r) for(int i=l;i<=r;i++) #define fod(i,r,l) for(int i=r;i>=l;i--) #define file "file" const int N = 1e5 + 5, mod = 1e9 + 7; int a[N] , dp[N][105]; signed main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); //freopen(file".INP" , "r" , stdin); //freopen(file".OUT" , "w" , stdout); int n , k; cin >> n >> k; fo(i, 1, n) cin >> a[i]; fo(i, 1, n) dp[i][1] = max(dp[i - 1][1] , a[i]); fo(j, 2, k) { stack <ii> st; fo(i, j, n) { int minf = dp[i - 1][j - 1]; while (!st.empty() && a[st.top().se] <= a[i]) { minf = min(minf , st.top().fi); st.pop(); } if (st.empty()) dp[i][j] = minf + a[i]; else dp[i][j] = min(dp[st.top().se][j] , minf + a[i]); st.push({minf , i}); } } cout << dp[n][k]; } // haronnee_
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...