Submission #1250814

#TimeUsernameProblemLanguageResultExecution timeMemory
1250814_filya_Feast (NOI19_feast)C++20
100 / 100
138 ms14520 KiB
#include<bits/stdc++.h>
typedef long long ll;
using namespace std;

int main()
{
// 	ifstream cin("input.txt");
//     ofstream cout("output.txt");
	ios::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
	int n, k; cin >> n >> k;
    vector<ll> a(n), pref(n + 1, 0);
    for (int i = 0; i < n; i++) {
        cin >> a[i];
        pref[i + 1] = pref[i] + a[i];
    }

    auto check = [&](ll lmb) {
        pair<ll, ll> dp[n][2];
        dp[0][0] = {0, 0};
		dp[0][1] = {a[0] - lmb, 1};
        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] - lmb, dp[i - 1][0].second + 1),
			        make_pair(dp[i - 1][1].first + a[i], dp[i - 1][1].second));
        }
        return max(dp[n - 1][0], dp[n - 1][1]);
    };
    ll lo = 0;
	ll hi = 1e18;
	while (lo < hi) {
		ll mid = (lo + hi + 1) / 2;
		check(mid).second >= k ? lo = mid : hi = mid - 1;

	}
	cout << check(lo).first + lo * k << endl;
}
#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...