#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 time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |