Submission #1116469

#TimeUsernameProblemLanguageResultExecution timeMemory
1116469manizareFeast (NOI19_feast)C++14
100 / 100
120 ms13896 KiB
#include <bits/stdc++.h> #define pb push_back #define F first #define pii pair<int,int> #define all(a) a.begin(),a.end() #define S second #define sz(a) (int)a.size() #define rep(i , a , b) for(int i = (a) ; i <= (b) ; i++) #define per(i , a , b) for(int i = (a) ; i >= (b) ; i--) #define int long long using namespace std ; const int maxn = 3e5 + 10 , mod = 1e9 + 7 , inf = 1e18 ; pii dp[maxn][2] ; int a[maxn] , n , k ; void mx(pii &a , pii b){ if(a.F < b.F || (a.F==b.F && a.S < b.S))a = b; } pii ch(int x){ dp[0][0] = {0 ,0}; dp[0][1] = {-inf , 0} ; rep(i ,1, n){ dp[i][0] = dp[i-1][0] ; mx(dp[i][0] , dp[i-1][1]) ; dp[i][1] = {dp[i-1][1].F+a[i] , dp[i-1][1].S}; mx(dp[i][1] , {dp[i-1][0].F+a[i]-x , dp[i-1][0].S+1}) ; } pii ans = dp[n][0] ; mx(ans , dp[n][1]); return ans ; } signed main(){ ios_base::sync_with_stdio(false) ; cin.tie(0) ; cin >> n >> k; rep(i ,1, n){ cin >> a[i] ; } int l = 0 , r= 1e18 ; while(r-l>1) { int mid = (l+r)/2 ; if(ch(mid).S >= k){ l = mid ; }else{ r = mid ; } } cout << ch(l).F + l*k << "\n"; }
#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...