Submission #1241232

#TimeUsernameProblemLanguageResultExecution timeMemory
1241232Trn115K blocks (IZhO14_blocks)C++20
100 / 100
85 ms4372 KiB
#include <bits/stdc++.h>

#define int long long
#define all(v) v.begin(), v.end()

using namespace std;

constexpr int N = 2e5+5;
constexpr int K = 505;
constexpr int INF = 1e18;

int n, k;
int a[N];

int l[N];
vector<int> dp, prevdp, mindp;

signed main()
{
    cin.tie(0)->sync_with_stdio(0);
    if (fopen("source.inp", "r"))
    {
        freopen("source.inp", "r", stdin);
        freopen("source.out", "w", stdout);
    }

    cin >> n >> k;
    for (int i = 1; i <= n; ++i) cin >> a[i];

    for (int i = 1; i <= n; ++i)
    {
        for (l[i] = i - 1; l[i] && a[l[i]] <= a[i]; l[i] = l[l[i]]) {}
    }

    dp.assign(n+1, INF);
    prevdp.assign(n+1, INF);
    dp[0] = 0;
    for (int i = 1; i <= k; ++i)
    {
        swap(dp, prevdp);
        dp.assign(n+1, INF);
        mindp.assign(n+1, INF);
        for (int j = 1; j <= n; ++j)
        {
            mindp[j] = prevdp[j-1];
            for (int t = j - 1; t > l[j]; t = l[t])
            {
                mindp[j] = min(mindp[j], mindp[t]);
            }
            dp[j] = min(dp[l[j]], mindp[j] + a[j]);
         }
    }
    cout << dp[n];
}

Compilation message (stderr)

blocks.cpp: In function 'int main()':
blocks.cpp:23:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   23 |         freopen("source.inp", "r", stdin);
      |         ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~
blocks.cpp:24:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   24 |         freopen("source.out", "w", stdout);
      |         ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...