제출 #1209938

#제출 시각아이디문제언어결과실행 시간메모리
1209938reginoxFeast (NOI19_feast)C++20
18 / 100
99 ms12104 KiB
#include <bits/stdc++.h>
#define ll long long
#define ld long double
#define all(v) begin(v), end(v)
#define pi pair<int, int>
#define vi vector<int>
using namespace std;
const int N = 3e5+3;
int n, k; ll a[N];
pair<ll, int> dp[N][2];

pair<ll, int> calc(ll lam){
    dp[0][1] = {-1e18, 0};
    for(int i = 1; i <= n; i++){
        dp[i][0] = max(dp[i-1][0], dp[i-1][1]);
        dp[i][1] = max(make_pair(dp[i-1][0].first + a[i] - lam, dp[i-1][0].second + 1), 
                        make_pair(dp[i-1][1].first + a[i], dp[i-1][1].second));
    }
    return max(dp[n][0], dp[n][1]);
}

int main(){
    ios_base::sync_with_stdio(0); cin.tie(0);
    cin >> n >> k;
    for(int i = 1; i <= n; i++) cin >> a[i];
    int mxc = 0;
    for(int i = 1; i <= n; i++)
        if(a[i] >= 0) mxc++;
    k = min(k, mxc);
    ll L = 0, R = 1e18+1;
    while(L <= R){
        ll mid = (L+R)/2;
        if(calc(mid).second >= k) L = mid + 1;
        else R = mid - 1;
    }
    // cout << L << " ";
    L--;
    cout << calc(L).first + k * L;
    return 0;
}
#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...