제출 #1296391

#제출 시각아이디문제언어결과실행 시간메모리
1296391chaitanyamehtaFeast (NOI19_feast)C++20
30 / 100
131 ms2752 KiB
#include<bits/stdc++.h> using namespace std; #define int long long int n , k; const int INF = 1e15; vector<int> a; pair<int , int> better(pair<int , int> opt1 , pair<int , int> opt2){ if(opt1.first != opt2.first){ return (opt1.first > opt2.first) ? opt1 : opt2; } else{ return (opt1.second >= opt2.second) ? opt1 : opt2; } } pair<int , int> check(int lambda){ pair<int , int> dp1 = {-INF , 0}, dp0 = {0 , 0}; for(int i = 0 ; i < n ; i++){ pair<int , int> opt1 = {(dp1.first == -INF) ? -INF : dp1.first + a[i] , dp1.second}; pair<int , int> opt2 = {dp0.first + a[i] - lambda , dp0.second + 1}; dp1 = better(opt1 , opt2); dp0 = better(dp1 , dp0); } return dp0; } int solve(){ int l = -1e15; int r = 1e15; int ans = 0; while(l < r){ int m = l + ((r-l+1) / 2); if(check(m).second >= k){ l = m; ans = m; } else{ r = m -1; } } return l; } signed main(){ cin>>n >> k; a.resize(n); for(int i = 0 ; i < n ;i++)cin>>a[i]; int ans = solve(); pair<int , int> fans = check(ans); cout << max(0LL , fans.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...