Submission #171753

# Submission time Handle Problem Language Result Execution time Memory
171753 2019-12-30T09:55:18 Z VEGAnn K blocks (IZhO14_blocks) C++14
53 / 100
1000 ms 51960 KB
#include <bits/stdc++.h>
#define sz(x) ((int)x.size())
#define PB push_back
#define MP make_pair
#define ft first
#define sd second
#define pii pair<int, int>
using namespace std;
const int oo = 1e9;
const int N = 100100;
const int K = 110;
const int PW = 20;
stack<pii> st;
int f[N][K], a[N], n, k, sp[N][PW], prec[N], pre[PW];

int get_min(int l, int r){
    int len = r - l + 1;
    return min(sp[l + pre[prec[len]] - 1][prec[len]], sp[r][prec[len]]);
}

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

    for (int i = 0; i <= n; i++)
        for (int j = 0; j <= k; j++)
            f[i][j] = oo;

    f[0][0] = 0;

    prec[0] = -1;

    pre[0] = 1;
    for (int i = 1; i < PW; i++)
        pre[i] = pre[i - 1] + pre[i - 1];

    for (int i = 1; i <= n; i++)
        prec[i] = prec[i >> 1] + 1;

    for (int j = 1; j <= k; j++) {
        while (sz(st)) st.pop();
        st.push(MP(0, oo));
        for (int i = 1; i <= n; i++){

            sp[i][0] = f[i - 1][j - 1];

            for (int po = 1; po < PW; po++){
                if (i - pre[po] < 0) break;
                sp[i][po] = min(sp[i][po - 1], sp[i - pre[po - 1]][po - 1]);
            }

            while (a[st.top().ft] <= a[i])
                st.pop();

            pii cr = st.top();
            st.push(MP(i, min(cr.sd, get_min(cr.ft + 1, i) + a[i])));

            f[i][j] = st.top().sd;
        }
    }

    cout << f[n][k];
    return 0;
}
# Verdict Execution time Memory Grader output
1 Correct 2 ms 376 KB Output is correct
2 Correct 2 ms 376 KB Output is correct
3 Correct 2 ms 376 KB Output is correct
4 Correct 2 ms 376 KB Output is correct
5 Correct 2 ms 376 KB Output is correct
6 Correct 2 ms 376 KB Output is correct
7 Correct 2 ms 376 KB Output is correct
8 Correct 2 ms 376 KB Output is correct
9 Correct 2 ms 376 KB Output is correct
10 Correct 2 ms 376 KB Output is correct
11 Correct 2 ms 376 KB Output is correct
12 Correct 2 ms 376 KB Output is correct
13 Correct 2 ms 504 KB Output is correct
14 Correct 2 ms 376 KB Output is correct
15 Correct 2 ms 376 KB Output is correct
16 Correct 2 ms 376 KB Output is correct
17 Correct 2 ms 376 KB Output is correct
18 Correct 2 ms 376 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 2 ms 376 KB Output is correct
2 Correct 2 ms 376 KB Output is correct
3 Correct 2 ms 376 KB Output is correct
4 Correct 2 ms 380 KB Output is correct
5 Correct 1 ms 376 KB Output is correct
6 Correct 2 ms 376 KB Output is correct
7 Correct 2 ms 376 KB Output is correct
8 Correct 2 ms 376 KB Output is correct
9 Correct 2 ms 380 KB Output is correct
10 Correct 2 ms 376 KB Output is correct
11 Correct 2 ms 376 KB Output is correct
12 Correct 2 ms 376 KB Output is correct
13 Correct 2 ms 376 KB Output is correct
14 Correct 2 ms 376 KB Output is correct
15 Correct 2 ms 376 KB Output is correct
16 Correct 2 ms 376 KB Output is correct
17 Correct 2 ms 292 KB Output is correct
18 Correct 2 ms 376 KB Output is correct
19 Correct 2 ms 376 KB Output is correct
20 Correct 2 ms 376 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 2 ms 376 KB Output is correct
2 Correct 2 ms 376 KB Output is correct
3 Correct 2 ms 376 KB Output is correct
4 Correct 2 ms 376 KB Output is correct
5 Correct 2 ms 376 KB Output is correct
6 Correct 2 ms 376 KB Output is correct
7 Correct 2 ms 376 KB Output is correct
8 Correct 2 ms 376 KB Output is correct
9 Correct 2 ms 376 KB Output is correct
10 Correct 2 ms 376 KB Output is correct
11 Correct 2 ms 376 KB Output is correct
12 Correct 3 ms 376 KB Output is correct
13 Correct 2 ms 376 KB Output is correct
14 Correct 2 ms 376 KB Output is correct
15 Correct 2 ms 376 KB Output is correct
16 Correct 2 ms 376 KB Output is correct
17 Correct 2 ms 376 KB Output is correct
18 Correct 2 ms 376 KB Output is correct
19 Correct 6 ms 424 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 24 ms 5496 KB Output is correct
2 Correct 47 ms 23260 KB Output is correct
3 Correct 67 ms 23288 KB Output is correct
4 Correct 260 ms 23344 KB Output is correct
5 Execution timed out 1083 ms 51960 KB Time limit exceeded
6 Halted 0 ms 0 KB -