제출 #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...