Submission #1313187

#TimeUsernameProblemLanguageResultExecution timeMemory
1313187zangdoK blocks (IZhO14_blocks)C++20
100 / 100
168 ms84768 KiB
/******************************************************************************

                              Online C++ Compiler.
               Code, Compile, Run and Debug C++ program online.
Write your code in this editor and press "Run" button to compile and execute it.

*******************************************************************************/

#include <bits/stdc++.h>
using namespace std;
const int MAXN = 1e5 +5;
const int MAXK = 105;
const long long INF = 1e12;
int arr[MAXN] ,pos[MAXN],n,k;
long long dp[MAXN][MAXK], pref[MAXN];
stack <int> gay;
stack <pair<int,long long> > dcm; 
int main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(nullptr); cout.tie(nullptr);
    //freopen("blocks.in", "r", stdin);
    //freopen("blocks.out", "w", stdout);
    cin>>n>>k;
    for(int i=1; i<=n;i++) {cin>>arr[i]; pref[i]=pref[i-1]+arr[i];}
    for(int i=n; i>=1; i--){
        while(!gay.empty()){
            if(arr[i]>arr[gay.top()]) {pos[gay.top()]= i;gay.pop();} 
            else break;
        }
        gay.push(i);
    }
    int maxt=-1;
    for(int i=0 ;i<=n;i++){
        for(int j=0; j<=k; j++){
            if(j>i) dp[i][j]= INF; 
        }
    }
    for(int i=1 ; i<=n;i++) {maxt=max(arr[i],maxt); dp[i][1]=maxt;}
    for (int j=2; j<=k;j++){
        while(!dcm.empty()) dcm.pop();
        for(int i=1; i<=n;i++){
            if(j>i) continue;
            long long vcl = dp[i-1][j-1];
            while(!dcm.empty()){
                pair <int, long long> chimbe = dcm.top();
                if(arr[i]>=arr[chimbe.first]) {vcl = min(vcl, chimbe.second); dcm.pop();}
                else break;
            }
            dcm.push({i, vcl});
            dp[i][j]= min(dp[pos[i]][j], vcl+arr[i]);
            //if(i==3&&j==3 ) cout<<dp[2][2]<<endl;
        }
    }
    //cout<<pos[6]<<endl;
    cout<<dp[n][k];
    return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...