Submission #1368144

#TimeUsernameProblemLanguageResultExecution timeMemory
1368144CutSandstoneFeast (NOI19_feast)C++20
12 / 100
38 ms2628 KiB
// CutSandstone always reads the entire problem statement.
#include <bits/stdc++.h>
using namespace std;
#define a first
#define b second
const int mod = 1e9 + 7;
const int inv2 = (mod + 1) / 2;
using ll = long long;
const ll oo = 1e18;
int main() {
	ios::sync_with_stdio(false);
	cin.tie(nullptr);
	int n, k;
	cin >> n >> k;
	vector<ll> a(n);
	for (ll& i : a) cin >> i;
	ll lo = 0, hi = 1e9;
	ll ans = -oo;
	while (lo < hi) {
		ll m = (lo + hi) >> 1;
		pair<ll, int> dp1 = {a[0] - m, 1}, dp2 = {0, 0};
		for (int i = 1; i < n; i++) {
			auto dp1a = max(pair<ll, int>{dp1.a + a[i], dp1.b},
							pair<ll, int>{dp2.a + a[i] - m, dp2.b + 1});
			auto dp2a = max(dp1, dp2);
			dp1 = dp1a;
			dp2 = dp2a;
		}
		auto ret = max(dp1, dp2);
		if (ret.b > k)
			lo = m + 1;
		else {
			hi = m;
			ans = max(ans, ret.a + m * ret.b);
		}
	}
	cout << ans << "\n";
}
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...