답안 #879728

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
879728 2023-11-28T02:33:56 Z 12345678 K개의 묶음 (IZhO14_blocks) C++17
0 / 100
1 ms 2396 KB
#include <bits/stdc++.h>

using namespace std;

const int nx=1e5+5, kx=105;
int n, k, v[nx], dp[kx][nx];

struct segtree
{
    int d[4*nx];
    void build(int l, int r, int i)
    {
        d[i]=1e9;
        if (l==r) return;
        int md=(l+r)/2;
        build(l, md, 2*i);
        build(md+1, r ,2*i+1);
    }
    void update(int l, int r, int i, int idx, int vl)
    {
        if (idx<l||r<idx) return;
        if (l==r) return void(d[i]=vl);
        int md=(l+r)/2;
        update(l, md, 2*i, idx, vl);
        update(md+1, r, 2*i+1, idx, vl);
        d[i]=min(d[2*i], d[2*i+1]);
    }
    int query(int l, int r, int i, int ql, int qr)
    {
        if (r<ql||qr<l) return INT_MAX;
        if (ql<=l&&r<=qr) return d[i];
        int md=(l+r)/2;
        return min(query(l, md, 2*i, ql, qr), query(md+1, r, 2*i+1, ql, qr));
    }
} s;

int main()
{
    cin.tie(NULL)->sync_with_stdio(false);
    cin>>n>>k;
    v[0]=1e9;
    for (int i=1; i<=n; i++) cin>>v[i], dp[0][i]=1e9;
    for (int i=1; i<=k; i++)
    {
        dp[i][0]=1e9;
        stack<int> st;
        st.push(0);
        s.build(1, n, 1);
        for (int j=1; j<=n; j++)
        {
            while (v[st.top()]<=v[j]) s.update(1, n, 1, st.top()+1, dp[i-1][st.top()]), st.pop();
            s.update(1, n, 1, st.top()+1, dp[i-1][st.top()]);
            //cout<<"update "<<st.top()+1<<' '<<dp[i-1][st.top()]<<'\n';
            dp[i][j]=s.query(1, n, 1, st.top()+1, j)+v[j];
            st.push(j);
            //cout<<i<<' '<<j<<' '<<dp[i][j]<<'\n';
        }
    }
    cout<<dp[k][n];
}
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 2396 KB Output is correct
2 Incorrect 1 ms 2396 KB Output isn't correct
3 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 2396 KB Output is correct
2 Incorrect 0 ms 2396 KB Output isn't correct
3 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 2396 KB Output is correct
2 Incorrect 1 ms 2396 KB Output isn't correct
3 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 2396 KB Output is correct
2 Incorrect 1 ms 2396 KB Output isn't correct
3 Halted 0 ms 0 KB -