제출 #1354332

#제출 시각아이디문제언어결과실행 시간메모리
1354332haught_veathFeast (NOI19_feast)C++20
4 / 100
112 ms12020 KiB
#include <bits/stdc++.h>
using namespace std;
#define hv signed main
#define int long long
#define all(x) x.begin(),x.end()
#define fileinp(name) freopen(name,"r",stdin)
#define fileout(name) freopen(name,"w",stdout)
#define loop(i, start, end, step) for (long long i = start; i <=end; i += step)
#define rloop(i,start,end,step) for(long long i = end; i>=start;i-=step)
#define fastio ios_base::sync_with_stdio(false);cout.tie(0);cin.tie(0)
#define ins push_back
template <typename T>
using v = vector<T>;
const int maxn = 3e5+5;
int n,a[maxn],k;
hv(){
  cin >> n >> k;
  for(int i = 1;i <= n;i++)cin >> a[i];
  
  auto check = [&](int pen) -> pair<int,int>{
    pair<int,int> dp[n+5][2];
		dp[1][0] = {0, 0};
		dp[1][1] = {a[1]-pen,1};
		for (int i = 2; 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][1].second+1),
			    make_pair(dp[i-1][1].first+a[i],dp[i-1][1].second));
		}
		return max(dp[n][0], dp[n][1]);
  };
  //value - pen 
  //if 
  int  l = 0, r = 1e15,ans = 0;
  // cout << l << " " << r << " ";
  while(l <= r){
    int mid = (l+r)/2;
    pair<int,int> response = check(mid);
    if(response.second < k)l = mid+1;
    else r = mid-1,ans = mid;
  }
  cout << check(ans).first + ans*k;
}
#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...