This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include <bits/stdc++.h>
#define ios ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0)
#define file(s) if (fopen(s".in", "r")) freopen(s".in", "r", stdin), freopen(s".out", "w", stdout)
#define all(a) a.begin() , a.end()
#define F first
#define S second
using namespace std;
using ll = long long;
const ll N = 3e5+5 , inf = 2e9 + 7;
const ll INF = 300000000000000 , mod = 1e9+7 , P = 6547;
ll n , k , a[N];
pair<ll,ll> dp[N][2];
ll get(ll md){
dp[0][0] = {0,0};
dp[0][1] = {-INF,0};
for(ll i = 1; i <= n; i++){
dp[i][0] = max(dp[i-1][0] , dp[i-1][1]);
pair<ll,ll> c = {dp[i-1][0].F+md+a[i] , dp[i-1][0].S+1};
pair<ll,ll> b = {dp[i-1][1].F+a[i] , dp[i-1][1].S};
dp[i][1] = max(c , b);
}
return (max(dp[n][0],dp[n][1]).S >= k);
}
void solve(){
cin >> n >> k;
for(ll i = 1; i <= n; i++) cin >> a[i];
ll l = -INF , r = 0 , res = 0;
while(l <= r){
ll md = (l+r) >> 1;
if(get(md)){
res = md;
r = md-1;
} else {
l = md+1;
}
}
get(res);
cout << max(dp[n][1].F , dp[n][0].F)-res*k << "\n";
}
/*
*/
signed main(){
ios;
solve();
return 0;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |