답안 #886800

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
886800 2023-12-13T01:49:30 Z AlphaMale06 K개의 묶음 (IZhO14_blocks) C++14
0 / 100
1 ms 860 KB
#include <bits/stdc++.h>
 
using namespace std;
 
#define F first
#define S second
 
const int N = 100005;
const int K = 103;
const int inf=1e9;
int dp[N], ndp[N], lg[N];
int st[N][17];
 
int get(int l, int r){
    if(l>r)return 0;
    int rng=r-l+1;
    int lga=lg[rng];
    return max(st[l][lga], st[r-(1<<lga)+1][lga]);
}
 
int main()
{
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    int n, k;
    cin >> n >> k;
    int a[n];
    for(int i=0; i< n; i++)cin >> a[i];
    lg[1]=0;
    for(int i=2; i<N; i++){
        lg[i]=lg[i/2]+1;
    }
    int mx=0;
    for(int i=0; i< n; i++){
        st[i][0]=a[i];
        mx=max(mx, a[i]);
        dp[i]=mx;
    }
    for(int j=1; j<17; j++){
        for(int i=0; i+(1<<j)<=n; i++){
            st[i][j]=max(st[i][j-1], st[i+(1<<(j-1))][j-1]);
        }
    }
    for(int j=2; j<=k; j++){
        stack<pair<int, int>> stc;
        stc.push({dp[0], 0});
        ndp[0]=inf;
        for(int i=1; i< n; i++){
            if(stc.size()==1){
                ndp[i]=stc.top().F + get(stc.top().S+1, i);
            }
            else{
                while(stc.size()>1){
                    pair<int, int> f=stc.top();
                    stc.pop();
                    pair<int, int> s=stc.top();
                    if(f.F+get(f.S+1, i)<s.F+get(s.S+1, i)){
                        stc.push(f);
                        break;
                    }
                }
            }
            ndp[i]=stc.top().F+get(stc.top().S+1, i);
            if(dp[i]<stc.top().F+get(stc.top().S+1, i)){
                stc.push({dp[i], i});
            }
        }
        for(int i=0; i< n; i++){
            dp[i]=ndp[i];
        }
    }
    cout << dp[n-1] << '\n';
}
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 860 KB Output is correct
2 Correct 1 ms 860 KB Output is correct
3 Correct 1 ms 860 KB Output is correct
4 Correct 1 ms 860 KB Output is correct
5 Correct 1 ms 860 KB Output is correct
6 Correct 1 ms 860 KB Output is correct
7 Correct 1 ms 860 KB Output is correct
8 Correct 1 ms 860 KB Output is correct
9 Correct 1 ms 860 KB Output is correct
10 Correct 1 ms 860 KB Output is correct
11 Correct 1 ms 860 KB Output is correct
12 Correct 1 ms 860 KB Output is correct
13 Incorrect 1 ms 860 KB Output isn't correct
14 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 604 KB Output is correct
2 Correct 0 ms 860 KB Output is correct
3 Correct 1 ms 860 KB Output is correct
4 Correct 1 ms 860 KB Output is correct
5 Correct 0 ms 860 KB Output is correct
6 Correct 1 ms 856 KB Output is correct
7 Correct 1 ms 856 KB Output is correct
8 Correct 1 ms 860 KB Output is correct
9 Correct 1 ms 860 KB Output is correct
10 Correct 1 ms 860 KB Output is correct
11 Correct 1 ms 828 KB Output is correct
12 Correct 1 ms 860 KB Output is correct
13 Correct 0 ms 860 KB Output is correct
14 Correct 1 ms 860 KB Output is correct
15 Correct 0 ms 860 KB Output is correct
16 Correct 1 ms 860 KB Output is correct
17 Correct 1 ms 860 KB Output is correct
18 Incorrect 1 ms 860 KB Output isn't correct
19 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 860 KB Output is correct
2 Correct 1 ms 860 KB Output is correct
3 Correct 1 ms 860 KB Output is correct
4 Correct 1 ms 860 KB Output is correct
5 Correct 1 ms 860 KB Output is correct
6 Correct 1 ms 860 KB Output is correct
7 Correct 1 ms 860 KB Output is correct
8 Correct 1 ms 860 KB Output is correct
9 Correct 1 ms 860 KB Output is correct
10 Correct 1 ms 860 KB Output is correct
11 Correct 1 ms 860 KB Output is correct
12 Correct 1 ms 860 KB Output is correct
13 Incorrect 1 ms 860 KB Output isn't correct
14 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 860 KB Output is correct
2 Correct 1 ms 860 KB Output is correct
3 Correct 1 ms 860 KB Output is correct
4 Correct 1 ms 860 KB Output is correct
5 Correct 1 ms 860 KB Output is correct
6 Correct 1 ms 860 KB Output is correct
7 Correct 1 ms 860 KB Output is correct
8 Correct 1 ms 860 KB Output is correct
9 Correct 1 ms 860 KB Output is correct
10 Correct 1 ms 860 KB Output is correct
11 Correct 1 ms 860 KB Output is correct
12 Correct 1 ms 860 KB Output is correct
13 Incorrect 1 ms 860 KB Output isn't correct
14 Halted 0 ms 0 KB -