Submission #1026320

#TimeUsernameProblemLanguageResultExecution timeMemory
1026320fv3Feast (NOI19_feast)C++14
12 / 100
26 ms4812 KiB
#include <bits/stdc++.h>
 
using namespace std;
typedef long long ll;
 
vector<ll> a, b;
 
ll mx_res;
ll solve(ll pun)
{
	ll seg_cnt = 0;
	mx_res = 0;

	ll res = -pun;
	ll last = 0;
	for (ll n : b)
	{
		if (n > 0)
		{
			last += n;
			mx_res = max(mx_res, res + last);

			continue;
		}

		if (n < -pun)
		{
			if (last > 0)
			{
				res += last;
				mx_res = max(mx_res, res);
				seg_cnt++;
			}
 
			last = -pun;
		}
		else
		{
			last += n;
		}
 
		if (last < -pun)
			last = -pun;
	}

	if (last > 0)
	{
		res += last;
		mx_res = max(mx_res, res);
		seg_cnt++;
	}

	return seg_cnt;
}
 
int main()
{
	ios::sync_with_stdio(0);
	cin.tie(0);
 
	ll N, K;
	cin >> N >> K;
 
	a = vector<ll>(N);
 
	for (int i = 0; i < N; i++)
		cin >> a[i];
 
	{
		ll sum = a[0];
		for (int i = 1; i < N; i++)
		{
			if ((a[i-1] ^ a[i]) < 0)
			{
				b.push_back(sum);
				sum = 0;
			}
			sum += a[i];
		}
 
		if (sum != 0)
			b.push_back(sum);
	}
 
	ll l = 0ll; 
	ll r = 1000000000000000000ll;
 
	while (l < r)
	{
		ll c = (l + r) / 2ll;
 
		if (solve(c) > K)
			l = c + 1;
		else
			r = c;
	}
 
	solve(l);
	cout << mx_res + K * l << '\n';
	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...