제출 #1147869

#제출 시각아이디문제언어결과실행 시간메모리
1147869nhphucFeast (NOI19_feast)C++20
100 / 100
106 ms11004 KiB
#include <bits/stdc++.h>
using namespace std;

const long long inf = 1e16;
const int N = 300300;

int n, k, a[N];
pair<long long, int> dp[N][2];

pair<long long, int> cost (long long lmb){
    dp[0][0] = {0ll, 0};
    dp[0][1] = {-inf, 0};
    for (int i = 1; i <= n; ++i){
        auto [x, y] = dp[i - 1][0];
        auto [u, v] = dp[i - 1][1];
        dp[i][0] = max(make_pair(x, y), make_pair(u, v));
        dp[i][1] = max(make_pair(x + 1ll * a[i] - lmb, y + 1), make_pair(u + 1ll * a[i], v));
    }
    return max(dp[n][0], dp[n][1]);
}   

int32_t main (){
    ios::sync_with_stdio(false); cin.tie(nullptr);
    // freopen("test.inp", "r", stdin);
    // freopen("test.out", "w", stdout);
    cin >> n >> k;
    for (int i = 1; i <= n; ++i){
        cin >> a[i];
    }
    long long l = 0, r = 1e16;
    while (l < r){
        long long m = l + r + 1 >> 1;
        auto [x, y] = cost(m);
        if (y >= k){
            l = m;
        } else {
            r = m - 1;
        }
    }
    cout << cost(l).first + 1ll * k * l;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...