Submission #1209976

#TimeUsernameProblemLanguageResultExecution timeMemory
1209976nguyendinhbachFeast (NOI19_feast)C++17
100 / 100
138 ms12168 KiB
#include<bits/stdc++.h>
using namespace std;
#define int long long
#define fi first
#define se second
#define siz(x) (int)(x.size())
#define all(x) x.begin(), x.end()
#define debug_arr(x,len) for(int _=1; _<=len; _++) cout<<x[_]<<" "; cout<<'\n';
#define debug(x) cout<<'\n'<<#x<<": "<<x<<'\n';
const int maxN = 3e5+5;

int n, k, a[maxN];
pair<int,int>cal(int lambda)
{
	pair<int,int>dp[n+5][2];
	dp[1][0] = {0, 0};
	dp[1][1] = {a[1] - lambda, 1};
	for(int i=2; i<=n; i+=1)
	{
		dp[i][0] = max(dp[i-1][0], dp[i-1][1]);
		pair<int,int>tmp1 = {dp[i-1][0].fi + a[i] - lambda, dp[i-1][0].se+1};
		pair<int,int>tmp2 = {dp[i-1][1].fi + a[i], dp[i-1][1].se};
		dp[i][1] = max(tmp1, tmp2);
	}
	return max(dp[n][0], dp[n][1]);
}

int32_t main()
{
	ios_base::sync_with_stdio(0); cin.tie(0);
	cin>>n>>k;
	for(int i=1; i<=n; i+=1) cin>>a[i];
	int l = 0, r = 1e18, t = 0;
	while(r - l >= 0)
	{
		int mid = (l+r)>>1;
		if(cal(mid).se >= k) l = mid+1, t = mid;
		else r = mid-1;
	}
	cout<<cal(t).fi+t*k<<'\n';
}
#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...