Submission #1126869

#TimeUsernameProblemLanguageResultExecution timeMemory
1126869_rain_K blocks (IZhO14_blocks)C++20
100 / 100
144 ms160864 KiB
#include<bits/stdc++.h>
using namespace std;

typedef long long LL;
#define inp(data_name) freopen(data_name,"r",stdin);
#define out(data_name) freopen(data_name,"w",stdout);
#define name "main"
#define FOR(i,a,b) for(int i=(a);i<=(b);++i)
#define FORD(i,a,b) for(int i=(b);i>=(a);--i)

#define N 1'000'00
#define MAXK 1'00
const LL INF=(LL)1e9+7;
int a[N+2],n,k;
LL dp[N+2][MAXK+2]={},f[N+2][MAXK+2]={};

int32_t main(){
    scanf("%d%d",&n,&k);
    FOR(i,1,n) scanf("%d",&a[i]);
    vector<int>q;
    a[0]=INF;q.push_back(0);
    memset(dp,0x3f,sizeof dp);
    memset(f,0x3f,sizeof f);
    dp[0][0]=0;
    FOR(i,1,n){
        while (q.size()&&a[q.back()]<a[i]) {
            FOR(j,1,k) {
                f[i][j]=min(f[q.back()][j],f[i][j]);
                dp[i][j]=min(f[q.back()][j-1]+a[i],dp[i][j]);
            }
            q.pop_back();
        }
        int x=q.back();
        FOR(j,1,k){
            dp[i][j]=min({dp[i][j],dp[x][j],dp[x][j-1]+a[i]});
            f[i][j]=min(f[i][j],dp[i][j]);
        }
        q.push_back(i);
    }
    printf("%lld",dp[n][k]);
}

Compilation message (stderr)

blocks.cpp: In function 'int32_t main()':
blocks.cpp:18:10: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   18 |     scanf("%d%d",&n,&k);
      |     ~~~~~^~~~~~~~~~~~~~
blocks.cpp:19:21: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   19 |     FOR(i,1,n) scanf("%d",&a[i]);
      |                ~~~~~^~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...