제출 #1305431

#제출 시각아이디문제언어결과실행 시간메모리
1305431orzorzorzFeast (NOI19_feast)C++20
100 / 100
91 ms12156 KiB
#include<bits/stdc++.h>
using namespace std;

#define ll long long

const int mxN=3e5;

int n, k;
ll a[mxN+1];
pair<ll, ll> dp[mxN+1][2];

pair<ll, ll> f(ll pen) {
	dp[0][0]={0, 0};
	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]-pen, 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::sync_with_stdio(0);
	cin.tie(0);
	cin>>n>>k;
	for(int i=1; i<=n; i++) 
		cin>>a[i];
	ll l=0, r=1e18;
	ll fin=0;
	while(l<=r) {
		ll mid=(l+r)/2;
		if(f(mid).second>=k) {
			l=mid+1;
			fin=mid;
		} else {
			r=mid-1;	
		}
	}
	cout<<f(fin).first+k*fin;
	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...