#include <bits/stdc++.h>
using namespace std;
#define ll long long
const int N=100100;
ll a[N];
ll dp[N][3];
int main()
{
    ios::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
    int n,k;
    cin>>n>>k;
    for(int i=1;i<=n;i++)
    {
        cin>>a[i];
        dp[i][0]=1e14;
    }
    // dp[0][1]=1e14;
    for(int j=1;j<=k;j++)
    {
        int p=j%2;
        for(int i=0;i<=n;i++)dp[i][p]=1e14;
        vector<int> st_mx,st_dp;
        vector<ll> ans;
        st_mx.push_back(0);
        st_dp.push_back(0);
        ans.push_back(dp[0][p]);
        for(int i=1;i<=n;i++)
        {
            // dp[i][p]=min( dp[i'][1-p] + max(a[i'+1 , i'+2 , .. , i]) ) 'i<i
            while(st_mx.size()>1 and a[st_mx.back()]<=a[i])
            {
                st_mx.pop_back();
                ans.pop_back();
            }
            // dp[i][p]=;
            // auto it=lower_bound(begin(st_dp),end(st_dp),st_mx.back());
            // cout<<"BACK "<<st_mx.back()<<endl;;
            ll etx=dp[st_mx.back()][1-p];
            // if(it!=end(st_dp))
            // {
            //     etx=dp[*it][1-p];
            //     // spl=*it;
            // }
            st_mx.push_back(i);
            ans.push_back(min(ans.back(),etx+a[i]));
            // cout<<"Split for "<<i<<' '<<p<<' '<<' '<<etx<<' '<<a[i]<<' '<<ans.back()<<endl;;
            dp[i][p]=ans.back();
            // cout<<"dp[ "<<i<<" ][ "<<j<<" ] = "<<dp[i][p]<<endl;
            while(st_dp.size()>0 and dp[st_dp.back()][1-p]>=dp[i][1-p])
            {
                st_dp.pop_back();
            }
            st_dp.push_back(i);
            // cout<<"st_dp: ";
            // for(auto x:st_dp)cout<<x<<' ';
            // cout<<endl;
            // cout<<"st_dp: ";
            // for(auto x:st_dp)cout<<dp[x][1-p]<<' ';
            // cout<<endl;
        }
    }
    cout<<dp[n][k%2]<<endl;
}
| # | 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... |