# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
635309 | ThMinh_ | K blocks (IZhO14_blocks) | C++14 | 1 ms | 340 KiB |
This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include<bits/stdc++.h>
#define forin(i,a,b) for(int i=a;i<=b;++i)
#define ll long long
using namespace std;
const int N = 1e5 + 10, M = 1e2 + 10;
int n, k;
ll a[N], dp[N][M], sp[N][17];
void build() {
forin(i,1,n) sp[i][0] = a[i];
forin(j,1,log2(n)) forin(i,1,n - (1<<j) + 1) {
sp[i][j] = max(sp[i][j - 1], sp[i + (1<<(j - 1))][j - 1]);
}
}
ll cost(int f, int l) {
if(f > l) return 1e16;
int j = (int)log2(l - f + 1);
return max(sp[f][j], sp[l - (1<<j) + 1][j]);
}
void solve(int f, int l, int from, int to, int k) {
if(f > l) return;
int mid = f + l >>1, p;
ll &a = dp[mid][k];
a = 1e16;
forin(i,from,to) {
ll nw = dp[i - 1][k - 1] + cost(i, mid);
if(a > nw) {
a = nw; p = i;
}
}
solve(f, mid - 1, from, p, k);
solve(mid + 1, l, p, to, k);
}
int main () {
cin.tie(0)->sync_with_stdio(0);
if(fopen("Task.inp","r")) {
freopen("Task.inp","r",stdin);
freopen("WA.out","w",stdout);
}
cin>>n>>k;
forin(i,1,n) cin>>a[i];
build();
dp[0][0] = 0;
forin(i,1,n) dp[i][0] = 1e16;
forin(i,1,k) {
if(i - 1) dp[0][i - 1] = 1e16;
solve(1, n, 1, n, i);
}
cout<<dp[n][k];
}
Compilation message (stderr)
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |