Submission #1133675

#TimeUsernameProblemLanguageResultExecution timeMemory
1133675HuyATFeast (NOI19_feast)C++17
100 / 100
89 ms1608 KiB
#include<bits/stdc++.h>
#define newl '\n'

const int N = 3e5 + 10;
const int V = 1e7 + 10;
const long long INF = 1e18;
const long long M = 1e9 + 7;

int a[N + 1],n,k;

void readData(){
    std::cin >> n >> k;
    for(int i = 1;i <= n;++i){
        std::cin >> a[i];
    }
}
std::pair<long long,int> dp(long long cost){
    std::pair<long long,long long> f[2]{{0,0},{-INF,0}};
    for(int i = 1;i <= n;++i){
        std::pair<long long,long long> nf[2];
        nf[0] = std::max(f[0],f[1]);
        nf[1] = std::max<std::pair<long long,int>>({f[0].first + a[i] - cost,f[0].second + 1},{f[1].first + a[i],f[1].second});
        f[0] = nf[0];
        f[1] = nf[1];
    }
    return std::max(f[0],f[1]);
}
long long solve(){
    long long lo = 0,hi = 1e14,ans = 0;
    while(lo <= hi){
        long long mid = (lo + hi) / 2;
        if(dp(mid).second >= k){
            ans = mid;
            lo = mid + 1;
        }else{
            hi = mid - 1;
        }
    }
    return dp(ans).first + k * ans;
}
int main(){
    std::ios_base::sync_with_stdio(false);
    std::cin.tie(nullptr);std::cout.tie(nullptr);
    readData();
//    std::cout << dp(7).first;
    std::cout << solve();
    return 0;
}
#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...