제출 #331358

#제출 시각아이디문제언어결과실행 시간메모리
331358loilon504K개의 묶음 (IZhO14_blocks)C++14
100 / 100
220 ms42212 KiB
/*#include <bits/stdc++.h>
#define ll long long
#define fi(i,a,b) for(int i=a; i<=b; i++)
#define fid(i,a,b) for(int i=a; i>=b; i--)
#define VanLoi ""
#define gb(i, j) ((i >> j) & 1)
#define MOD 1000000007
#define N 1000005

using namespace std;

int n, k, a[N], f[105][N], top;

struct pii {
    int F, S;
} q[N];

int main()
{
    ios_base::sync_with_stdio(0);
    cin.tie(0); cout.tie(0);
    freopen(VanLoi".inp", "r", stdin);
    freopen(VanLoi".out", "w", stdout);
    cin >> n >> k;
    fi(i, 1, k)
        fi(j, 0, n) f[i][j] = 1e9;
    f[1][0] = 0;
    fi(i, 1, n) cin >> a[i], f[1][i] = max(f[1][i - 1], a[i]);
    f[1][0] = 1e9;
    fi(i, 2, k) {
        top = 0;
        q[0].S = 0;
        fi(j, 1, n) {
            int res = f[i - 1][j - 1];
            while (top && a[q[top].S] <= a[j]) {
                res = min(res, q[top].F);
                top--;
            }
            f[i][j] = min(f[i][q[top].S], res + a[j]);
            q[++top] = {res, j};
        }
    }
    cout << f[k][n];
    return 0;
}*/

#include <bits/stdc++.h>
#define ll long long
#define fi(i,a,b) for(int i=a; i<=b; i++)
#define fid(i,a,b) for(int i=a; i>=b; i--)
#define VanLoi ""
#define gb(i, j) ((i >> j) & 1)
#define MOD 1000000007
#define N 1000005

using namespace std;

int n, k, a[N], f[105][N], l[N], mi[N];

int main()
{
    ios_base::sync_with_stdio(0);
    cin.tie(0); cout.tie(0);
    cin >> n >> k;
    fi(i, 1, k)
        fi(j, 0, n) f[i][j] = 1e9;
    f[1][0] = 0;
    fi(i, 1, n) cin >> a[i], f[1][i] = max(f[1][i - 1], a[i]);
    fi(i, 1, n)
        for(l[i] = i - 1; l[i] && a[l[i]] <= a[i]; ) l[i] = l[l[i]];
    f[1][0] = 1e9;
    fi(i, 2, k) {
        mi[i - 1] = 1e9;
        fi(j, 1, n) {
            mi[j] = f[i - 1][j - 1];
            for(int t = j - 1; t > l[j]; t = l[t]) mi[j] = min(mi[j], mi[t]);
            f[i][j] = min(f[i][l[j]], mi[j] + a[j]);
        }
    }
    cout << f[k][n];
    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...