제출 #1291423

#제출 시각아이디문제언어결과실행 시간메모리
1291423maithedungFeast (NOI19_feast)C++20
100 / 100
82 ms26232 KiB
#include <bits/stdc++.h> using namespace std; #define int long long #define endl '\n' #define fast ios_base::sync_with_stdio(false), cin.tie(0), cout.tie(0) #define exit return 0 #define cap pair<int,int> #define fi first #define se second #define pb push_back #define FOR(i,l,r) for(int i=l;i<=r;i++) #define FOD(i,r,l) for(int i=r;i>=l;i--) #define fill(f,x) memset(f,x,sizeof(f)) #define lcm(a,b) (a/__gcd(a,b)*b) #define TIME 1.0 * clock() / CLOCKS_PER_SEC cap F[300005][5]; int A[1000005]; int n,k; cap check(int lamda) { F[1][0]={0,0}; F[1][1]={A[1]-lamda,1}; FOR(i,2,n) { F[i][1]=max(make_pair(F[i-1][0].first-lamda+A[i],F[i-1][0].second+1),make_pair(F[i-1][1].first+A[i],F[i-1][1].second)); F[i][0]=max(F[i-1][0],F[i-1][1]); } return max(F[n][1],F[n][0]); } int tknp() { int l=1; int r=*max_element(A+1,A+1+n)*n; int ans=0; while(l<=r) { int mid=(l+r)>>1; if(check(mid).second>=k) { ans=mid; l=mid+1; } else r=mid-1; } return check(ans).first+k*ans; } signed main() { fast; cin>>n>>k; FOR(i,1,n) { cin>>A[i]; } cout<<tknp(); exit; } /* ░▒▓███████▓▒░░▒▓█▓▒░░▒▓█▓▒░▒▓███████▓▒░ ░▒▓██████▓▒░ ░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒░░▒▓█▓▒░ ░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒░ ░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒▒▓███▓▒░ ░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒░░▒▓█▓▒░ ░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒░░▒▓█▓▒░ ░▒▓███████▓▒░ ░▒▓██████▓▒░░▒▓█▓▒░░▒▓█▓▒░░▒▓██████▓▒░ */
#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...